活动记录 - 查找和更新(仅当对象存在时)

时间:2014-01-14 18:46:18

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个可能存在或可能不存在于数据库中的记录的id。

我想要做的只是更新数据库中记录的属性,否则忽略它。

现在我知道我可以做类似的事情:

model = Model.find_by_id(id)
if model
     model.update_attribute(something: something)
end

但我想知道是否有更好的东西不涉及2个查询?

2 个答案:

答案 0 :(得分:2)

Model.update_all({:something => 'something'}, {:id => id})

例如:

User.update_all({:first_name => 's'}, {:id => 1000})

将生成查询

UPDATE "users" SET "first_name" = 's' WHERE "users"."id" = 1000

答案 1 :(得分:2)

如果您没有要更新的对象,并且您希望在更新后触发AR回调,那么这将产生两个SQL查询,但很好看:

Model.update(id, {something: something})

如果您对回调不感兴趣,可以使用:

Model.update_all({something: something}, {id: id})