是否可以在单个查询中更新以下数据?ActiveRecord - 在单个查询中更新不同记录的单列数据
ID Seq
2 2
1 4
4 1
3 3
这将是最好的,如果它可以用轨道活动记录完成,否则与SQL查询将会非常好。
这样做的原因是我有场景,我需要经常基于ajax请求更新一组id。我相信它在单个查询中完成得更加优化。
是否可以在单个查询中更新以下数据?ActiveRecord - 在单个查询中更新不同记录的单列数据
ID Seq
2 2
1 4
4 1
3 3
这将是最好的,如果它可以用轨道活动记录完成,否则与SQL查询将会非常好。
这样做的原因是我有场景,我需要经常基于ajax请求更新一组id。我相信它在单个查询中完成得更加优化。
这就是我如何处理活动记录。
_params = ["12", "9", "13", "14", "15", "16"]
db = ActiveRecord::Base.connection();
query = "UPDATE #{self.table_name} SET display_order = CASE id "
_params.each_with_index do |d,i|
query += sanitize_sql(["WHEN ? THEN ? ",d,i])
end
query += "END "
query += "WHERE id in ('#{_params.join("','")}') "
我想你是问你是否可以在一次交易中完成一组更新。
在导轨中,您可以使用ActiveRecord::Base.transaction来实现此目的。例如,对于一个Model
,您可以:
Model.transaction do
Model.update(2, {:seq => 2})
Model.update(1, {:seq => 4})
Model.update(4, {:seq => 1})
Model.update(3, {:seq => 3})
end
谢谢。它绝对是解决方案之一。 – TonyTakeshi 2012-08-10 03:12:31
我们不能直接调用使用的Active Record单个查询多个更新。正如你所说,我们可以在rails中作为sql查询运行它。
sql = ActiveRecord::Base.connection();
sql.execute("INSERT into products (id,name,description) VALUES (id-1,'name4','desc4'),(id-2,'name5','desc5'),(id-3,'name6','desc7') ON DUPLICATE KEY UPDATE name=VALUES(name),description=VALUES(description);")
更好地说出问题。 – edhedges 2012-08-09 02:18:00
这是一个正确的问题。为什么downvote? – TonyTakeshi 2012-08-09 10:50:32
我不是downvote,但当我第一次看到这个问题需要改进。 – edhedges 2012-08-09 12:21:13