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.
9a1b1136b42f179b246b9d3eb66fc996?d=identicon&s=25 sol (Guest)
on 2009-02-25 11: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
0348be81e22f24afdaa6e4f137aa9dfc?d=identicon&s=25 Priya Buvan (priyadharsini)
on 2009-02-25 13:55

you can use through na..
9a1b1136b42f179b246b9d3eb66fc996?d=identicon&s=25 sol (Guest)
on 2009-02-25 14:28
(Received via mailing list)
sorry, what?

On Feb 25, 1:55 pm, Priya Buvan <rails-mailing-l...@andreas-s.net>
40db9e75b3f5899258e3bdc0c9210154?d=identicon&s=25 Conrad Taylor (conradwt)
on 2009-02-25 14:34
(Received via mailing list)
On Wed, Feb 25, 2009 at 5:27 AM, sol <ch.blank@gmail.com> wrote:

>
> sorry, what?
>
> On Feb 25, 1:55 pm, Priya Buvan <rails-mailing-l...@andreas-s.net>
> wrote:
> > you can use through na..
>

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

Good luck,

-Conrad
9a1b1136b42f179b246b9d3eb66fc996?d=identicon&s=25 sol (Guest)
on 2009-02-25 15:40
(Received via mailing list)
Hi,

On Feb 25, 2:34 pm, Conrad Taylor <conra...@gmail.com> 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.
Db7238007950074e9e73b76a81910406?d=identicon&s=25 Tonypm (Guest)
on 2009-02-27 21: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
D6434aa0b7b350f8c3ed0119d81b2ead?d=identicon&s=25 Roy Pardee (rpardee)
on 2009-02-28 03: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.