Foo.where(:some_id => 1).update_all(:some_columnn => "1")
这是更新Foo的正确方法吗?我不想查找和更新对象。
Foo.where(:some_id => 1).update_all(:some_columnn => "1")
这是更新Foo的正确方法吗?我不想查找和更新对象。
是的,这是正确的方法,但请记住,不会执行任何回调或验证。
顺便说一句, update_all 也接受条件。像这样
Foo.update_all({:some_columnn => "1"}, {:some_id => 1})
从 Rails 4开始,不再在update_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')
如果您不想实例化对象,这是正确的方法,但请记住,这也意味着它不会执行您的任何模型验证或回调 - 它直接进入 SQL 更新命令。
你可以使用条件,根据update_all的api
update_all(更新,条件 = nil,选项 = {})
所以你可以这样做:
Foo.update_all(:some_column => '1', :some_id => 1)