0

私はこのメソッドを呼び出すためにJSソートを使用しています:

def sort
    params[:piece].each_with_index do |id, index|
      current_user.lineup.piece_lineups.update_all({position: index+1}, {piece_id: id})
    end
    render nothing: true
  end

そして私のpiece_lineupモデルには次のものがあります。

after_update :update_associated_lineup

ただし、そのupdate_all呼び出しによってトリガーされることはありません。私は何か間違ったことをしていますか?

4

1 に答える 1

0

update_allメソッドは1つのSQLUPDATEクエリを生成し、それだけです。ActiveRecordオブジェクトをインスタンス化しないため、検証やコールバックはトリガーされません。コールバックをトリガーするには、そのようなことをする必要があります

piece_lineups = current_user.lineup.piece_lineups

params[:piece].each_with_index do |id, index|
  piece_lineups.
    select { |pl| pl.piece_id == id }.
    map { |pl| pl.update_attribute(:position, index + 1) }
end
于 2012-06-28T01:36:50.090 に答える