我正在尝试使用ActiveRecord的update_all更新数据库中的记录集合。输入脚本/控制台。
MyModel.update_all("reserved = 1", :order => 'rand()', :limit => 1000)
ActiveRecord认为订单是一个列,说它是未知的并抛出异常。根据文档,我的语法看起来很清醒。这是RoR 2.3.5。
单独执行MyModel.update_all("reserved = 1")
时,效果很好。
如果我这样做
MyModel.update_all(“reserved = 1”,“reserve_type = 2”,:order =>“rand()”,:limit => 1000) => 0
影响了0行。
我只是想做:UPDATE MyModel SET reserved=1, reserve_type=2 ORDER BY RAND() LIMIT 1000
答案 0 :(得分:5)
由于update_all
的第二个参数应该是条件,你需要像这样传递一个空哈希:
MyModel.update_all("reserved = 1", {}, {:order => 'rand()', :limit => 1000})
这应该按预期工作。
答案 1 :(得分:0)
只是澄清了Jakub的回应,正确的格式应该是:
MyModel.update_all("reserved = 1, reserve_type = 2", {}, {:order => 'rand()', :limit => 1000})
如果要更新多个列,则第一个参数必须包含以逗号分隔的列列表。