順番の制御が楽にできるらしいRailsのacts_as_listだがupdateのコストが高そう…
class Hoge < ActiveRecord::Base belongs_to :grouping acts_as_list :scope => :grouping_id end
def increment_positions_on_lower_items(position) acts_as_list_class.update_all( "#{position_column} = (#{position_column} + 1)", "#{scope_condition} AND #{position_column} >= #{position}") end
例えばグループ4の3番目の位置に新しいインサートすると
UPDATE table SET position = position + 1 WHERE grouping_id = 4 AND position > 3;
みたいなSQLを実行して、3以下のやつを下に移動させる。updateコストがちと心配だが、コストが問題になるほど大量のレコードをacts_as_listで扱うことは無いのだろうな…、というか扱わないように注意