2013-04-04 113 views
0

属性的前值可以说我有一个模型(一个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的文档)它不能与attr_accessor工作,只能用实际列2)存储一个对象,你每一次重做查询,重置对象 – apneadiving 2013-04-04 12:25:22

回答

1

我想不出有任何理由这样做,但如果你真的需要,你可以覆盖setter方法,你去商店的各种变化。

def x1=(value) 
    @previous_x1_value = x1 
    super 
end 

def previous_x1_value 
    @previous_x1_value || x1_was 
end 
0

这一切都建立在对轨道。见[[email protected]][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']