Could not find the association

Hello,
I’ve used has_many :through many times with success but for
somereason am being stymied this time. Perhaps someone else can see
what I am not.
The three relevant models are these:

class Playlist < ActiveRecord::Base
has_many :songs, :through => ‘playlist_songs’, :source=>:song
has_many :playlist_songs
end

class PlaylistSong < ActiveRecord::Base
set_table_name ‘playlist_songs’
belongs_to :playlist
belongs_to :song
end

class Song < ActiveRecord::Base
has_many :playlists, :trhough=>‘playlist_songs’
end

when I try and use Playlist.songs i get an error, demonstrated below,

pl=Playlist.find :first
=> #<Playlist id: 1, name: “stimbletunes”, updated_at: “2008-07-28
16:38:10”, description: nil, created_at: “2008-07-28 16:38:10”>

pl.songs
ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find
the association “playlist_song” in model Playlist
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/
active_record/reflection.rb:195:in check_validity!' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/ active_record/associations/has_many_through_association.rb:5:ininitialize’
from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/
active_record/associations.rb:1128:in new' from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/ active_record/associations.rb:1128:insongs’
from (irb):7

pl.songs.new
ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find
the association “playlist_song” in model Playlist

If anyboday has an idea what I should do differently, please let me
know.
Thanks,
Michael Fairchild

mfairchi wrote:

class Playlist < ActiveRecord::Base
has_many :songs, :through => ‘playlist_songs’, :source=>:song
has_many :playlist_songs
end

Uh…

class Playlist < ActiveRecord::Base
has_many :playlist_songs
has_many :songs, :through => ‘playlist_songs’, :source=>:song
end

If I were writing has_many, I would not delay its evaluation. So it
could only
see class attributes declared above it.

Always remember the area between class and end is itself a series of
statements
that get evaluated in order.


Phlip

Hello,
You may be right that I should have my has_many before the
has_many :trhough, however my understanding (from the example in the
rails api) is that the has_many :playlist_songs part is optional, and
I should only need the has_many :songs, :through=>:playlist_songs.

In any case, I tried moving things around as per your suggestion,
but It did not change the error.

~Michael

What happens if you just leave the :source part out? I’ve never had to
use
that.

Op dinsdag 29 juli 2008 20:00:23 UTC+2 schreef mfairchi het volgende: