如何在不加载ActiveRecord中的对象的情况下更新列

时间:2013-07-19 10:48:54

标签: ruby-on-rails activerecord

Foo.where(:some_id => 1).update_all(:some_columnn => "1")

这是更新Foo的正确方法吗?我不想查找并更新对象。

4 个答案:

答案 0 :(得分:2)

是的,这是正确的方法,但请记住,不会执行任何回调或验证

BTW,update_all也接受条件。喜欢这个

Foo.update_all({:some_columnn => "1"}, {:some_id => 1})

答案 1 :(得分:2)

As of Rails 4update_all方法不再提供条件,而是在前面的集合中指定。例如,

# updates everything, as usual
Foo.update_all(some_column: '1')

# update only the specified rows
Foo.where(some_id: 1).update_all(some_column: '1')

答案 2 :(得分:0)

如果您不想实例化对象,这是正确的方法,但请记住,这也意味着它不会执行任何模型验证或回调 - 它直接进入SQL更新命令。 / p>

Further information

答案 3 :(得分:0)

根据update_all

的api,您可以使用条件

update_all(updates,conditions = nil,options = {})

所以你可以这样做:

Foo.update_all(:some_column => '1', :some_id => 1)