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