如果未使用Rails

时间:2018-02-22 13:46:29

标签: ruby-on-rails activerecord sql-update

我需要在数据库中保存对象,前提是其他人没有更新。 例如,

p = Person.find_by_id(1)
p.token = '83747'

这里,我希望只有在数据库中没有更新时才将对象保存在数据库中。类似于下面的查询。

update persons set token='83747' where id=p.id and updated_at != p.updated

我认为我可以使用lock_version来实现这一目标。但是,我需要它来避免在从cron作业运行时更新它。有没有办法使用Active记录实现此目的。并且模型上有回调。

为了进一步澄清,我试图不更新数据库中的记录,如果我有记录的陈旧副本,以避免覆盖其他人所做的更改。

如何在不使用lock_version并确保回调有效的情况下实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以同时使用created_atupdated_at默认属性(如果这足够您的情况),可以使用以下内容

p = Person.find_by(1)

# if has never been updated yet
if p.created_at != p.updated_at
  p.token = '83747'
  p.save
end