2013-07-19 14 views
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"] 

任何人都可以解釋這種差距,或建議的解決方法?

+0

使用賦值似乎糾正了這個問題,即使它降低了序列化的便利性。 wr.assigned_to_staff = [User.last.name]正確設置變量並將wr.assigned_to_staff保存爲[]。 – biagidp

回答

1

看起來序列化沒有完全實現主機類的所有方法。覆蓋提供給getters和setter,但不是連接。