有没有更好的方法在 Ruby on Rails 中使用不同值在一个查询中更新更多记录?我解决了在 SQL 中使用 CASE 的问题,但是有任何 Active Record 解决方案吗?
基本上,当新列表从 jquery ajax 帖子返回时,我会保存新的排序顺序。
#List of product ids in sorted order. Get from jqueryui sortable plugin.
#product_ids = [3,1,2,4,7,6,5]
# Simple solution which generate a loads of queries. Working but slow.
#product_ids.each_with_index do |id, index|
# Product.where(id: id).update_all(sort_order: index+1)
#end
##CASE syntax example:
##Product.where(id: product_ids).update_all("sort_order = CASE id WHEN 539 THEN 1 WHEN 540 THEN 2 WHEN 542 THEN 3 END")
case_string = "sort_order = CASE id "
product_ids.each_with_index do |id, index|
case_string += "WHEN #{id} THEN #{index+1} "
end
case_string += "END"
Product.where(id: product_ids).update_all(case_string)
该解决方案运行速度很快,并且只有一个查询,但我创建了一个查询字符串,如 php.ini 文件。:) 你有什么建议?