Noz*_*Noz 1 activerecord ruby-on-rails-3
您如何使用正在更新的记录的旧值?
例如,在以下代码块中,在确定它确实已更改后,如何使用先前的winner_id字段运行查询?
if self.winner_id_changed?
old_value = self.changed_attributes
User.find(old_value)
#do stuff with the old winner....
end
Run Code Online (Sandbox Code Playgroud)
输出的示例self.changed_attributes将是:
{ "winner_id"=> 6}
我是否真的必须将其转换为字符串并解析该值才能对其执行查询?old_value[:winner_id]好像什么也没做.
使用where代替find,并使用以下注入方法对更改生成所需的哈希:
if self.winner_id_changed?
old_value = self.changes.inject({}) { |h, (k,v)| h[k] = v.first }
old_user = User.where(old_value)
#do stuff with the old user....
end
Run Code Online (Sandbox Code Playgroud)
您还可以使用ActiveRecord脏方法,例如:
self.winner_id_was
Run Code Online (Sandbox Code Playgroud)
获取特定属性的旧值.完整的文档可以在这里找到.