[英]Difference of update_all in Rails 3 and 4
在Rails 3.2中,我有以下内容:
class Shop < ActiveRecord::Base
def self.sort(shop_ids)
shop_ids.each_with_index do |id, index|
update_all(
{ position: index + 1 },
id: id
)
end
end
end
如果我运行Shop.sort([3, 1, 2])
,它将输出以下查询:
UPDATE `shops` SET `position` = 1 WHERE `trip_days`.`id` = 3
UPDATE `shops` SET `position` = 2 WHERE `trip_days`.`id` = 1
UPDATE `shops` SET `position` = 3 WHERE `trip_days`.`id` = 2
但是,当我升级到Rails 4时,它返回错误:
ArgumentError (wrong number of arguments (2 for 1)):
在update_all
行中。
我可以通过使用.update
解决这个.update
,但是每个更新的行会执行.update
查询。 一个选择和一个更新。 我不需要两个查询。 update_all
更直接。
我怎样才能解决这个问题?
在Rails 4,你必须做这样的 :
where(id: id).update_all(position: index + 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.