如何使用正在更新的记录的旧值?
例如在下面的代码块中,在确定它确实已经改变之后,如何使用之前的winner_id字段运行查询?
if self.winner_id_changed?
old_value = self.changed_attributes
User.find(old_value)
#do stuff with the old winner....
end
self.changed_attributes
的示例输出为:
{ “winner_id”=→6}
我是否真的必须将其转换为字符串并解析该值才能对其执行查询? old_value[:winner_id]
似乎没有做任何事情。
答案 0 :(得分:6)
使用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
您还可以使用ActiveRecord脏方法,例如:
self.winner_id_was
获取特定属性的旧值。可以找到完整的文档here。