如果存在则更新,否则什么也不做?

Mik*_*rin 5 ruby ruby-on-rails

当且仅当模型存在时,我正在尝试更新模型的值.如果没有,我什么都不做.搜索似乎只返回更新或创建问题/答案,但我不想创建.

我知道我可以用一个简单的方法做到:

found = Model.find_by_id(id)
if found
  update stuff
end
Run Code Online (Sandbox Code Playgroud)

但是,我觉得有一种方法可以在一次调用中执行此操作,而无需分配任何临时本地值或执行if.

如果不存在噪声错误,如何编写rails调用来更新记录?

最新的Rails 3.x

Pra*_*tki 11

您可以使用尝试调用上的update_attributes的结果之前的Rails的方法find_by_idwhere.

trynil如果记录不存在,将以静默方式返回而不引发异常.如果记录存在,它将更新它.

found = Model.find_by_id(id).try(:update_attributes, {key: value})
Run Code Online (Sandbox Code Playgroud)