In meiner Rails-App habe ich eine Liste erstellt, die es dem Benutzer ermöglicht, Datensätze durch Klicken/Ziehen/Ablegen zu sortieren. Nach jeder Nachbestellung führe ich die Aktualisierungsaktion aus und gebe die old_index
und new_index
des verschobenen Elements weiter und sortiere die gesamte Liste neu. Die Anwendung funktioniert wie erwartet, solange ich die Objekte nicht sehr schnell neu anordne. Meine Frage ist, wie kann ich das Design verbessern, das ich für eine schnelle Sortierung durch den Benutzer berücksichtigen muss und diese Änderungen genau widerspiegeln? Ich versuche auch zu verhindern, dass der Benutzer auf einen "Speichern" -Button klicken muss - wenn es aber notwendig ist, kann ich das implementieren.In Rails kann die Ajax-Sortierung nicht mit dem Verschieben von Elementen in meiner Liste Schritt halten
Update-Aktion
def update
if @list_item.present?
# update the modified item, and then update all items after that are affected
old_index = params[:old_rank].to_i
new_index = params[:sequence_rank].to_i
@list_item.update(sequence_rank: new_index) # update the moved item
# move element down and shift others up
if old_index < new_index
@list.list_items.where('sequence_rank <= (?) AND list_items.id \
<> (?) AND sequence_rank > (?)', new_index, @list_item.id, 0)
.each_with_index do |item,index|
item.update(sequence_rank: item.sequence_rank-1)
end
# move element up and shift elements down
else
@list.list_items.where('sequence_rank >= (?) AND list_items.id \
<> (?) AND sequence_rank < (?)', new_index, @list_item.id, old_index+1)
.each_with_index do |item,index|
item.update(sequence_rank: item.sequence_rank+1)
end
end
end
render nothing: true
end
auch folgende gem Ich verwende: https://github.com/scttdavs/sortable-rails