Could not find the association

156 views
Skip to first unread message

mfairchi

unread,
Jul 29, 2008, 2:00:23 PM7/29/08
to Ruby on Rails: Talk
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:in
`initialize'
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:in `songs'
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

Phlip

unread,
Jul 29, 2008, 2:19:44 PM7/29/08
to rubyonra...@googlegroups.com
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

mfairchi

unread,
Jul 29, 2008, 2:55:23 PM7/29/08
to Ruby on Rails: Talk
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

Jasper Kennis

unread,
Mar 11, 2012, 4:05:11 PM3/11/12
to rubyonra...@googlegroups.com
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:
Reply all
Reply to author
Forward
0 new messages