I’m trying to set up a has_many through association, and it should go
through a belongs_to assocation.
class Company
has_many :videos
end
class Site
belongs_to :company
has_many :videos, :through => :company
end
Site.find(:first).videos
ActiveRecord::StatementInvalid: PGError: ERROR: column
companies.company_id does not exist
: SELECT videos.* FROM videos INNER JOIN companies ON
videos.company_id = companies.id WHERE ((companies.company_id = 1))
From the documentation:
“:through: Specifies a Join Model to perform the query through.
Options for :class_name and :foreign_key are ignored, as the
association uses the source reflection. You can only use a :through
query through a belongs_to or has_many association.”
So it seems as though I should be able to do it…but AR is doing the
join incorrectly. Any ideas?
Pat
On 8/17/07, Pat M. [email protected] wrote:
has_many :videos, :through => :company
“:through: Specifies a Join Model to perform the query through.
Options for :class_name and :foreign_key are ignored, as the
association uses the source reflection. You can only use a :through
query through a belongs_to or has_many association.”
So it seems as though I should be able to do it…but AR is doing the
join incorrectly. Any ideas?
site.company.videos ?
or…
class Site
belongs_to :company
delegate :videos, :to => :company
end
Perhaps the docs are unclear? Here’s a couple has_many :through
examples:
class Article
has_many :comments
has_many :users, :through => comments
end
class Comment
belongs_to :user
belongs_to :article
end
class User
has_many :articles
has_many :comments, :through => :articles
end
–
Rick O.
http://lighthouseapp.com
http://weblog.techno-weenie.net
http://mephistoblog.com
I’m a newbie, but I’m going to take a crack at this one.
From what I understand, you have three models: Site, Company, and
Video
From your example, I don’t understand which model describes the pivot
table – the table in the middle of the many to many relationship I
believe you are trying to establish, if I understand correctly. I
think your pivot table is sites, for the model Site. I believe that
would look like this:
class Company
has_many :sites
has_many :videos :through => :sites
end
class Site
belongs_to :companies
belongs_to :videos
end
class Video
has_many :sites
has_many :companies :through => :sites
end
If you are trying to make a many to many relationship between videos
and companies, then the above is how you do it. The pivot table
belongs to each of the tables it joins; each table in the many-to-many
relationship has_many of the other table, but each also has_many of
the pivot table.
Charlie
On Aug 17, 3:20 pm, “Pat M.” [email protected] wrote:
end
":through: Specifies a Join Model to perform the query through.
O
tions for :class_name and :foreign_key are ignored, as the