comment accéder à des rails de joindre les attributs de modèle lors de l'utilisation de has_many :through

J'ai un modèle de données à quelque chose comme ceci:

# columns include collection_item_id, collection_id, item_id, position, etc
class CollectionItem < ActiveRecord::Base
  self.primary_key = 'collection_item_id'
  belongs_to :collection
  belongs_to :item
end

class Item < ActiveRecord::Base
  has_many :collection_items
  has_many :collections, :through => :collection_items, :source => :collection
end

class Collection < ActiveRecord::Base
  has_many :collection_items, :order => :position
  has_many :items, :through => :collection_items, :source => :item, :order => :position
end

Un Élément peut apparaître dans plusieurs collections et aussi plus d'une fois dans la même collection à des positions différentes.

Je suis en train de créer une méthode d'assistance que crée un menu contenant tous les éléments dans chaque collection. Je veux utiliser le collection_item_id de garder une trace de l'élément actuellement sélectionné entre les demandes, mais je ne peux pas accéder aux attributs de la jointure modèle via la classe de l'Élément.

def helper_method( collection_id )
  colls = Collection.find :all
  colls.each do |coll|
    coll.items.each do |item|
# !!! FAILS HERE ( undefined method `collection_item_id' )
      do_something_with( item.collection_item_id )
    end
  end
end

J'ai essayé, mais il échoue également avec ( undefined method `collection_item' )

do_something_with( item.collection_item.collection_item_id )

Edit: merci à serioys sam de remarquer que le dessus est bien évidemment faux

J'ai également essayé d'accéder à d'autres attributs de la jointure modèle, comme ceci:

do_something_with( item.position )

et:

do_something_with( item.collection_item.position )

Edit: merci à serioys sam de remarquer que le dessus est bien évidemment faux

mais ils échouent également.

Quelqu'un peut me conseiller comment procéder?

Modifier: -------------------->

J'ai trouvé de la documentation en ligne à l'aide de has_and_belongs_to_many va s'attacher à la jointure de la table d'attributs de récupéré des éléments, mais apparemment, il est obsolète. Je n'ai pas encore essayé.

Actuellement, je suis en train de travailler sur la modification de mon modèle de la Collection comme ceci:

class Collection < ActiveRecord::Base
  has_many :collection_items, :order => :position, :include => :item
  ...
end

et évolution de l'aide pour utiliser coll.collection_items au lieu de coll.les éléments

Modifier: -------------------->

J'ai changé mon aide pour travail en tant que ci-dessus et il fonctionne très bien - (merci sam)

Il fait un gâchis de mon code, en raison d'autres facteurs ne sont pas détaillées ici - mais rien qu'une heure ou deux de re-factoring l'habitude de trier.

eh bien, vous avez accès à l'aide collection_items pas d'éléments

OriginalL'auteur Noel Walters | 2009-03-12