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 值)。你能建议一种方法吗?

4

2 回答 2

1

我想不出这样做的理由,但如果你真的需要,你可以重写 setter 以随时存储各种更改。

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

def previous_x1_value
  @previous_x1_value || x1_was
end
于 2013-04-04T12:43:11.303 回答
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']
于 2013-04-04T13:54:24.780 回答