假设我有一个模型(ActiveRecord类):
class Sample < ActiveRecord::Base
attr_accessor :x1
end
我知道
Sample.last.x1 == 1 #true
如果我设置Sample.last.x1 = 3
,那么Sample.last.x1_was == 1 #true
。
但是,当我再次设置x1的值时:Sample.last.x1 = 8
然后Sample.last.x1_was == 3 #false
,Sample.last.x1 == 1 #true
我可以猜到它为什么会发生(自更改后Sample.last没有保存),但我想找到一种方法来检索x1的前值(不是db值)。你能建议一种方法吗?
答案 0 :(得分:1)
我无法想到这样做的理由,但如果你真的需要,你可以覆盖设置器来存储各种变化。
def x1=( value )
@previous_x1_value = x1
super
end
def previous_x1_value
@previous_x1_value || x1_was
end
答案 1 :(得分:0)
IT全部内置于rails。请参阅[ActiveRecord@dirty][1]
person.name = 'Bob'
person.changed? # => true
person.name_changed? # => true
person.name_was # => 'uncle bob'
person.name_change # => ['uncle bob', 'Bob']
person.name = 'Bill'
person.name_change # => ['uncle bob', 'Bill']