访问ruby中属性的前一个值

时间:2013-04-04 12:09:31

标签: ruby-on-rails ruby activerecord

假设我有一个模型(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 #falseSample.last.x1 == 1 #true

我可以猜到它为什么会发生(自更改后Sample.last没有保存),但我想找到一种方法来检索x1的前值(不是db值)。你能建议一种方法吗?

2 个答案:

答案 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']