2010-05-06 151 views
0

我試圖用ActiveRecord的update_all更新我的數據庫中的記錄集合。輸入腳本/控制檯。Ruby on Rails 2.3.5:update_all在ActiveRecord上失敗

MyModel.update_all("reserved = 1", :order => 'rand()', :limit => 1000) 

ActiveRecord認爲訂單是一列,說它是未知的,並引發異常。根據文檔,雖然我的語法看起來很理智。這是RoR 2.3.5。

單獨做MyModel.update_all("reserved = 1")時,它工作得很好。

另外,如果我做

MyModel.update_all( 「保留= 1」, 「reserve_type = 2」,:爲了=> 「蘭特()」,:極限=> 1000) = > 0

0行受影響。

我只是試圖做:UPDATE MyModel SET reserved=1, reserve_type=2 ORDER BY RAND() LIMIT 1000

回答

5

由於update_all第二個參數應該是條件,你需要傳遞一個空的哈希值是這樣的:

MyModel.update_all("reserved = 1", {}, {:order => 'rand()', :limit => 1000}) 

這應該按預期工作。

0

上的Jakub的迴應只是澄清,正確的格式應該是:

MyModel.update_all("reserved = 1, reserve_type = 2", {}, {:order => 'rand()', :limit => 1000}) 

如果您要更新多列,第一個參數必須包含用逗號分隔的列的列表。