使用JS调用update_all方法时,after_update不会触发

时间:2012-06-27 23:02:20

标签: ruby-on-rails activerecord

我正在使用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调用触发。我做错了什么?

1 个答案:

答案 0 :(得分: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