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方法生成一个 SQL UPDATE 查询,仅此而已。它不会实例化任何 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 回答