Hi,

I came across a certain use case that could need some fine tuning. Let's 
say I have a song Model. This song is available in many formats. So, the 
song has_many formats (mp3, flac, ...). The song also has the original 
where the other might have been generated from. So, the song has_one 
original. This is my current state of affairs:

class Song < ActiveRecord::Base
  has_many :formats
  has_one :original, class_name: "Format", conditions: { tag: "original" }
end

So far, so good. Problem is, now I have my original made available in two 
different places, and if I update one, it is not reproduced on the other, 
until I synchronize everything from the database (not to the database). 

s = Song.first
s.formats.select{|f| f.tag == "original" } # original original
s.original #original original
s.original = Format.create(.... tag: "original") # changed original 
s.formats.select{|f| f.tag == "original" } # original original (!!)
s.reload
s.formats.select{|f| f.tag == "original" } # changed original

And this sucks, specially when I start playing around with validations, I 
end up tucking more than I would like to. 

So the question is: how well could one devise such an association which is 
contained somewhere else? Something like:

class Song < ActiveRecord::Base

  has_many :formats
  has_one :original, class_name: "Format", conditions: { tag: "original" },*on: 
:formats
*

end

And from then on this "has one" would be a proxy to an instance contained 
in an has_many collection. 

So, what would speak against such a feature? I'm all hears

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to