2009-08-05 9 views
0

J'ai 2 articles 'article' et 'activité'. Un 'élément' peut avoir plusieurs 'activités' (nombre limité d'activités, utilisé par tous les éléments). Pour plus de clarté: ceci est représenté par une table avec un élément par ligne, une activité par colonne et quelque chose/rien sur l'intersection si une ligne existe dans les matrices de table.has_many à travers: comment récupérer l'identifiant d'une ligne dans la table de correspondance?

pour voir une image (vaut 1000 mots :)): http://tinypic.com/r/33ygtj9/3

Les relations sont (je pense) définir correctement: point matrices has_many, activités has_many article par des matrices

matrices has_many d'activité, l'activité des éléments has_many par des matrices

matrice

appartient à l'élément, matrice appartient à l'activité

Quelques informations complémentaires/utiles: - la matrice est représentée graphiquement par une table avec un élément par ligne, une activité par colonne et OK/KO sur l'intersection s'il existe une ligne dans les matrices de table. - j'ai 2 autres modèles dans l'image: un modèle de cours et un modèle de chapitre (cours a de nombreux chapitres, le chapitre a de nombreux articles) - Tout se passe dans la vue du cours « show »

Jusqu'à présent, je l'ai réussi à créer directement une ligne (sans passer par un formulaire) dans la table des matrices avec l'identifiant activity_id et l'item_id. Cependant, j'ai du mal à supprimer une ligne, car je ne comprends pas comment accéder à la valeur de matrices.id. La seule façon que j'ai trouvé encore est, pour chaque article, de parcourir toutes les activités disponibles pour cet item dans un hash (clé = activity_id, value = matrices_id). Si l'activité n'est pas disponible, j'affiche OK + un lien pour créer une ligne dans les matrices sinon, OK + lien à détruire.

Existe-t-il un moyen plus simple/plus rapide de faire cela? c'est-à-dire se débarrasser du hachage?

merci pour votre aide.

Pierre

Répondre

0

OK, je suis stupide ...

i se concentrait sur les lignes où je sais que item.matrices [x] n'a pas été nul. .. et l'erreur est venue des lignes où items.matrices [x] est nul ...

Alors tout est résolu en ajoutant simplement un sauf items.matrices [x] .nil?

C'est la chose amusante sur la programmation: perdre du temps pour des choses comme ça ... mais l'apprentissage de toute façon :)

0

Alors:

class Item 
    has_many :activities, :through => :matrix 
end 

class Activity 
    has_many :items, :though => matrix 
end 

class Matrix 
    belongs_to :item 
    belongs_to :activity 
end 

Tout d'abord, je suppose que vous enregistrez plus d'informations dans la matrice, sinon vous pourriez avoir utilisé des relations has_and_belongs_to_many entre les éléments et activités.

Vous pouvez ajouter des relations has_many pour rendre les choses plus facile:

class Item 
    has_many :activities, :through => :matrix 
    has_many :matrices 
end 

class Activity 
    has_many :items, :though => matrix 
    has_many :matrices 
end 

class Matrix 
    belongs_to :item 
    belongs_to :activity 
end 

Je ne sais pas comment les cours et les modèles chapitres sont liés, il est donc difficile de dire quoi que ce soit à leur sujet.

La vue est peut-être quelque chose comme:

@chapter.items.include?(course)? link_to("Destroy", link_to_destroy) : link_to("Create", create_a_line) 
+0

les relations ressemblent déjà à ce que vous avez proposé. en ce qui concerne le chapitre et bien sûr: cours chapitres has_many (de course_id) chapitre belongs_to cours la dernière partie (y compris) est en fait pas ce que je voudrais faire. Je voudrais quelque chose comme item.matrices [0] .id mais même si item.matrices.size renvoie quelque chose, je ne peux pas accéder à un index spécifique – Pierre

+0

Je commence à devenir fou. si je fais <% item.matrices.each do | mt |%> <%=mt.id%> <%end%> je peux voir chaque ID de matrice, mais item.matrices [0] .id ne fonctionnera pas! Suis-je stupide? – Pierre

Questions connexes