Ruby on Rails Dirty method _was not working with serialized field -


i have model looks this:

class workrequest < activerecord::base   attr_accessible :upload, :assigned_to_staff   serialize :assigned_to_staff, array    before_save :set_old_staff   def set_old_staff     @old_staff = self.assigned_to_staff_was   end    def staff_changed?     !self.assigned_to_staff.empty? && self.assigned_to_staff != @old_staff   end end 

i'm trying make use of self.assigned_to_was track when staff assignment change takes place. i'm noticing serialized field behaves differently regular field. console output below shows differing behavior in :upload (text string field) , serialized :assigned_to_staff:

1.9.2-p320 :002 > wr.upload  => nil  1.9.2-p320 :003 > wr.upload_was  => nil  1.9.2-p320 :004 > wr.upload = "yes"  => "yes"  1.9.2-p320 :005 > wr.upload_was  => nil  

compared to:

1.9.2-p320 :006 > wr.assigned_to_staff  => []  1.9.2-p320 :007 > wr.assigned_to_staff_was  => []  1.9.2-p320 :008 > wr.assigned_to_staff << user.last.name   user load (0.2ms)  select `users`.* `users` order `users`.`id` desc limit 1  => ["last5, first5"]  1.9.2-p320 :009 > wr.assigned_to_staff_was  => ["last5, first5"]  

can explain discrepancy , or suggest workaround?

it appears serialization doesn't implement methods of host class. overrides provided getters , setters, not concatenation.


Comments