Ruby on rails 访问ruby中属性的前一个值
假设我有一个模型(ActiveRecord类): 如果我设置了Ruby on rails 访问ruby中属性的前一个值,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,假设我有一个模型(ActiveRecord类): 如果我设置了Sample.last.x1=3,那么Sample.last.x1_=1#true 但是当我再次设置x1的值时:Sample.last.x1=8然后Sample.last.x1_=3#false,但是Sample.last.x1==1#true 我可以猜到为什么会发生这种情况(自更改后Sample.last没有保存),但我想找到一种方法来检索x1的前一个值(而不是db值)。你能建议一种方法吗?我想不出这样做的理由,但是如果你真的需要,
Sample.last.x1=3
,那么Sample.last.x1_=1#true
但是当我再次设置x1的值时:Sample.last.x1=8
然后Sample.last.x1_=3#false
,但是Sample.last.x1==1#true
我可以猜到为什么会发生这种情况(自更改后Sample.last没有保存),但我想找到一种方法来检索x1的前一个值(而不是db值)。你能建议一种方法吗?我想不出这样做的理由,但是如果你真的需要,你可以重写setter来存储你所做的各种更改
def x1=( value )
@previous_x1_value = x1
super
end
def previous_x1_value
@previous_x1_value || x1_was
end
这一切都内置于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']
1) 它不能与attr_accessor一起使用,只能与实际列一起使用2)存储对象,您每次都要重新执行查询,重置对象
def x1=( value )
@previous_x1_value = x1
super
end
def previous_x1_value
@previous_x1_value || x1_was
end
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']