Il n'y a rien dans le plug-in qui est appelée lorsque l'objet est mis à jour. Vous devrez le faire manuellement en utilisant les méthodes intégrées que acts_as_list fournit.
Le fichier rubis pour ce plug-in est à seulement 300 lignes et facile à suivre, il vous dira tout ce qu'il ya à savoir sur acts_as_list ... Honnêtement, il n'y a pas grand-chose à ce: https://github.com/swanandp/acts_as_list/blob/master/lib/acts_as_list/active_record/acts/list.rb
Pour le faire manuellement, Il suffit d'obtenir tous les éléments avec une position plus élevée que l'élément actuel et d'incrémenter chacun d'eux. C'est ainsi que je le gère dans mes applications (sans utiliser acts_as_list mais le concept est là). Ceci est par exemple est pour les forums de commande:
forum.rb
PositionOptions = [["First Forum", "-1"]] + all.map{|forum| ["After #{forum.subject}", forum.position]}
attr_accessor :position_before
before_save :set_position, :if => "position_before.present?"
def set_position
self.position = position_before.to_i + 1
end
after_save :do_positions, :if => "position_before.present?"
def do_positions
Forum.where('position >= ? AND id != ?', position, id).order('position, updated_at DESC').all.each_with_index do |forum, index|
forum.update_attribute('position', position + index + 1)
end
end
vue
<% position_options = Forum::PositionOptions %>
<%= f.select :position_before, position_options.reject {|forum| @forum.position == forum[1]}, :selected => position_options[position_options.index {|p| p[1] == @forum.position} - 1][1] %>
Peut-être pas la meilleure façon de le faire, mais il était le meilleur Je pourrais venir avec. Ce sera probablement trop cher si vous prévoyez souvent de mettre à jour les positions, ou si beaucoup d'objets seront positionnés ... mais cela fonctionne pour les petites collections comme les forums.