Forum: Ruby on Rails Association through 2 intermediate Models

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
sol (Guest)
on 2009-02-25 12:11
(Received via mailing list)
Hey,

I have an association chain like this:

Site has_many Feed(s) has_many FeedEntry(/ies) has_many Articles

where the reverse is always belongs_to:

Article belongs_to FeedEntry belongs_to Feed belongs_to Site

Now what I want is to get all articles that belong to a specific Site,
something like Site.first.articles

I can't figure out how to do this, or if it's possible with
has_many :through
Can anyone give me a hint please?

Thank you
Priya B. (Guest)
on 2009-02-25 14:55

you can use through na..
sol (Guest)
on 2009-02-25 15:28
(Received via mailing list)
sorry, what?

On Feb 25, 1:55 pm, Priya B. <removed_email_address@domain.invalid>
Conrad T. (Guest)
on 2009-02-25 15:34
(Received via mailing list)
On Wed, Feb 25, 2009 at 5:27 AM, sol <removed_email_address@domain.invalid> 
wrote:

>
> sorry, what?
>
> On Feb 25, 1:55 pm, Priya B. <removed_email_address@domain.invalid>
> wrote:
> > you can use through na..
>

Hi, I recommend reading AWDwR 3ed on using 'has_many through' for the
details.

Good luck,

-Conrad
sol (Guest)
on 2009-02-25 16:40
(Received via mailing list)
Hi,

On Feb 25, 2:34 pm, Conrad T. <removed_email_address@domain.invalid> wrote:
> Hi, I recommend reading AWDwR 3ed on using 'has_many through' for the
> details.

These details are the reason I'm asking :)

is this:
http://agilewebdevelopment.com/plugins/nested_has_...

still the only way to do this? or am I just blind.
Tonypm (Guest)
on 2009-02-27 22:31
(Received via mailing list)
perhaps the responses could be a bit more helpful here?

sol,

I have done it through 2 level associations using through

eg.

Sites

has_many :feed_entries, :through=>:feeds

I have tried with 3 levels, but never got it to work, ie, how do you
chain the throughs.  I have tried to make sure that the through is in
place at each level, but to no avail.

Perhaps someone may be able to enlighten us.

Tonypm
Roy P. (Guest)
on 2009-02-28 04:44
(Received via mailing list)
I don't know if you can get there just w/HM=>T, but you can fake out the
last link w/a custom method.  This is working for me:

class Article < ActiveRecord::Base
  belongs_to :feed_entry
end

class FeedEntry < ActiveRecord::Base
  belongs_to :feed
  has_many :articles
end

class Feed < ActiveRecord::Base
  belongs_to :site
  has_many :feed_entries
  has_many :articles, :through => :feed_entries
end

class Site < ActiveRecord::Base
  has_many :feeds
  def articles
    arts = []
    self.feeds.each do |f|
      arts << f.articles
    end
    # Not sure if that uniq call is necessary...
    arts.flatten.uniq
  end
end

That gives me a my_site.articles collection which returns the union of
all articles attached to any feed_entry attached to any feed attached to
the Site.

HTH,

-Roy
This topic is locked and can not be replied to.