Getting nil value when setting an on Join model via a has_many :through relationship

5 views
Skip to first unread message

Mario Zigglesworth

unread,
Aug 12, 2011, 2:45:21 PM8/12/11
to Ruby on Rails: Talk
Hi All,

I've been trying to figure out what's wrong here for a little over a
day and figured i'd reach out to the ROR list.

A pastie explains the code a bit better than directly in email:
http://pastie.org/private/mvu0zr1xm18bsk6nfbyama

Basically i have an Artist, and he has many Songs through a join model
called Releases. An artist can be "featured" on a song... take for
example most rap songs where there is more than 1 artist on the
track.

My goal here is to be able to set an artist as the featured on a song
when creating the song... something like this:
Artist.first.featured_songs.create!(:title => "blah"). Rails allows
me to do that with the current association setup (in the pastie above)
BUT for some reason the release.featured attribute is always set to
nil.

Anyway ideas?

Thank you!

John Hinnegan

unread,
Aug 13, 2011, 2:08:41 AM8/13/11
to rubyonra...@googlegroups.com
First off, that's a crazy datamodel.  I would really try to pull that apart more if you can.  Intuitively, there is a noun missing.  This would probably make your current problem easier to solve.

That aside, were I trying to solve your problem at hand, I would probably try using association callbacks


maybe something like:
class Artist
has_many :featured_songs, :through => :releases, :after_add => :set_featured_flag

def set_featured_flag(featured_song)
  # haven't done this before  on a through relationship before, I think you'll have to search for the release object
  r = Release.where(:artist => self).where(:song => featured_song) #order by newest if they're not unique?
  r.featured = true
  r.save
end

end

Reply all
Reply to author
Forward
0 new messages