1
我有一個模型,看起來像這樣:Ruby on Rails的骯髒的方法_was不與序列化領域工作
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
我想利用self.assigned_to_was的當工作分配發生改變跟蹤。我注意到序列化字段的行爲與普通字段不同。上傳(文本字符串字段)和序列化: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
相比:
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`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
=> ["last5, first5"]
1.9.2-p320 :009 > wr.assigned_to_staff_was
=> ["last5, first5"]
任何人都可以解釋這種差距,或建議的解決方法?
使用賦值似乎糾正了這個問題,即使它降低了序列化的便利性。 wr.assigned_to_staff = [User.last.name]正確設置變量並將wr.assigned_to_staff保存爲[]。 – biagidp