Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 访问ruby中属性的前一个值_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 访问ruby中属性的前一个值

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值)。你能建议一种方法吗?我想不出这样做的理由,但是如果你真的需要,

假设我有一个模型(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值)。你能建议一种方法吗?

我想不出这样做的理由,但是如果你真的需要,你可以重写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']