2

您如何处理正在更新的记录的旧值?

例如,在以下代码块中,在我确定它确实已更改后,我将如何使用先前的 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]似乎什么也没做。

4

1 回答 1

7

使用 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

获取特定属性的旧值。完整的文档可以在这里找到。

于 2012-09-17T16:27:05.733 回答