Eric Hahn
2009-Nov-06 12:51 UTC
How can I make an aggregated property support ActiveRecord::Dirty semantics?
Hoping one of the many experts here might help out a newb... I have an aggregated attribute which I want to be able ask about its _changed? ness, etc. composed_of :range, :class_name => ''Range'', :mapping => [ %w(range_begin begin), %w(range_end end)], :allow_nil => true If I use the aggregation: foo.range = 1..10 This is what I get: foo.range # => 1..10 foo.range_changed? # NoMethodError foo.range_was # ditto foo.changed # [''range_begin'', ''range_end''] So basically, I''m not getting ActiveRecord::Dirty semantics on aggregated attributes (they are on the underlying db attrs). Is there a beautiful way to implement dirty semantics on the aggregation? I''m not having a lot of luck with alias_attribute_with_dirty, etc. I really am unfond of making my own range_changed?, range_was, etc. Frankly, I was a bit surprised that aggregation didn''t support dirty natively... Advice greatly appreciated.
Frederick Cheung
2009-Nov-06 14:00 UTC
Re: How can I make an aggregated property support ActiveRecord::Dirty semantics?
On Nov 6, 12:51 pm, Eric Hahn <e...-StdO6VYKx2VBDgjK7y7TUQ@public.gmane.org> wrote:> So basically, I''m not getting ActiveRecord::Dirty semantics on aggregated attributes (they are on the underlying db attrs). > > Is there a beautiful way to implement dirty semantics on the aggregation? I''m not having a lot of luck with alias_attribute_with_dirty, etc. I really am unfond of making my own range_changed?, range_was, etc. Frankly, I was a bit surprised that aggregation didn''t support dirty natively...The dirty stuff is all centred around actual attributes. you could define def range_changed? range_begin_changed? || range_end_changed end def range_was range_begin .. range_end end and so on. shouldn''t be too hard to automate definition of these methods. Fred> > Advice greatly appreciated.