Ruby on Rails 2.3.5:update_all在ActiveRecord上失败

时间:2010-05-06 23:17:29

标签: ruby-on-rails ruby

我正在尝试使用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

2 个答案:

答案 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})

如果要更新多个列,则第一个参数必须包含以逗号分隔的列列表。