Ruby on rails 如何在ActiveRecords跟踪的模型中获取瞬态属性的更改?
假设模型具有非瞬态属性a和瞬态属性b:Ruby on rails 如何在ActiveRecords跟踪的模型中获取瞬态属性的更改?,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,假设模型具有非瞬态属性a和瞬态属性b: class Model < ActiveRecord::Base attr_accessor :b end 类模型
class Model < ActiveRecord::Base
attr_accessor :b
end
类模型
我想让Rails跟踪两个属性的属性更改。当前,model.changes只跟踪属性a的更改
到目前为止,我所尝试的:
使用ActiveModel::Dirty方法:
include ActiveRecord::AttributeMethods::Dirty
class Model < ActiveRecord::Base
attr_accessor :b
define_attribute_methods [:b]
def b
@b
end
def b=(val)
b_will_change! unless val == @b
@b = val
end
end
包含ActiveRecord::AttributeMethods::Dirty
类模型
不幸的是,Rails不喜欢它,并抛出了一个类型错误
有什么办法可以做到这一点吗?根据定义,非持久化变量要么为nil,要么为dirty 此属性不会在数据库中持久化。那么,要跟踪更改的初始值是什么呢?当然,瞬态属性的初始值为零,但当该瞬态属性的当前值被覆盖时,总是会发生更改。与持久化属性相同。。。