If you want to reload the association cache you can pass true as argument.

s.formats(true).select { |f| f.tag == "original" }

Will always get what you want.

Rafael Mendonça França
http://twitter.com/rafaelfranca
https://github.com/rafaelfranca


On Tue, Feb 19, 2013 at 12:56 PM, ChuckE <[email protected]> wrote:

> 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.
>
>
>

-- 
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