I''m trying to find the best way to handle this task, and I''m not having much luck. I think I lack knowledge of the terminology to research this. I have these models: Account, which has many Pages Page, has many Items Item, has many Tags (through a join model: ItemTag) Tag, has many Items (through same join model) What''s the simplest way to retrieve all Tags associated with an Account? Right now, the best I can do is iterate through each Item and add the associated tags to an array. This seems overly cumbersome, and I''m hoping there''s a better way. Any advice? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jeff wrote:> I''m trying to find the best way to handle this task, and I''m not > having much luck. I think I lack knowledge of the terminology to > research this. I have these models: > > Account, which has many Pages > Page, has many Items > Item, has many Tags (through a join model: ItemTag) > Tag, has many Items (through same join model) > > What''s the simplest way to retrieve all Tags associated with an > Account? Right now, the best I can do is iterate through each Item and > add the associated tags to an array. This seems overly cumbersome, and > I''m hoping there''s a better way. Any advice?I think you''re looking for has_and_belongs_to_many association. Try something like: #app/models/item.rb has_and_belongs_to_many :tags #app/models/tag.rb has_and_belongs_to_many :items #app/models/item_tag.rb has_many :tags has_many :items I haven''t tested that but it should do what you want. HTH Matt --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
What I have now is similar, but using has_many :through instead of habtm. What I''m looking for is something functionally equivalent to: account = Account.find(:first) account.tags # returns all tags across all items, on all pages Note that the tags are actually associated with items, which are associated with pages, which are associated with accounts. A few degrees of separation there. Will switching to habtm allow this? Thanks, Jeffr On Dec 17, 1:17 pm, Matt Harrison <iwasinnamuk...-ja4MoDZtUtVl57MIdRCFDg@public.gmane.org> wrote:> Jeff wrote: > > I''m trying to find the best way to handle this task, and I''m not > > having much luck. I think I lack knowledge of the terminology to > > research this. I have these models: > > > Account, which has many Pages > > Page, has many Items > > Item, has many Tags (through a join model: ItemTag) > > Tag, has many Items (through same join model) > > > What''s the simplest way to retrieve all Tags associated with an > > Account? Right now, the best I can do is iterate through each Item and > > add the associated tags to an array. This seems overly cumbersome, and > > I''m hoping there''s a better way. Any advice? > > I think you''re looking for has_and_belongs_to_many association. Try > something like: > > #app/models/item.rb > has_and_belongs_to_many :tags > > #app/models/tag.rb > has_and_belongs_to_many :items > > #app/models/item_tag.rb > has_many :tags > has_many :items > > I haven''t tested that but it should do what you want. > > HTH > > Matt--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jeff wrote:> What I have now is similar, but using has_many :through instead of > habtm. What I''m looking for is something functionally equivalent to: > > account = Account.find(:first) > account.tags # returns all tags across all items, on all pages > > Note that the tags are actually associated with items, which are > associated with pages, which are associated with accounts. A few > degrees of separation there. Will switching to habtm allow this?Not that I''m aware of. Sorry but I think I misread the critial part of your post. As far as I know (and some ruby genius will come up with a far better idea) the only way to do what you want is to iterate through the pages and the items and then collect tags. It might be possible to do it with an association but I don''t know how, although I would be interested to know if it is possible.> Thanks, > JeffrMatt --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
def tags pages.map(&:items).map(&:tags) end If you must. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---