Ich habe eine Kategorie mit einer Liste von Elementen. Die Artikel haben eine Position und die Kategorie hat eine Beziehung has_many: items,: order => "position". Wenn ein Benutzer einen Positionswert aktualisiert, möchte ich seine Position sehen. Meine Position ist ein Gleitkomma, um zwischen gerundeten Zahlen wechseln zu können.Rails - Wie man eine Verbindung nach einem Speichern aktualisieren
pos=item.category.items.map(&:id)
current_position=pos.index(id.to_i)
item.save # want to refresh the relationship here
pos_new=item.categoty.items.map(&:id)
# grabbing this since just accessing item isn't updated if positioning has changed
item_new=Item.find(id)
pos_new=item_new.category.items.map(&:id)
new_position=pos_new.index(id)
if current_position!=new_position
is_moved=true # sent back in JSON to propagate a dynamic change.
end
Das obige funktioniert, aber es scheint wirklich ausführlich. Gibt es eine Möglichkeit für mich, auf Artikel zu speichern, dass die Kategorie Beziehung aktualisiert werden muss, da die Reihenfolge geändert werden konnte?
Wer kommt noch zu dieser Antwort von der Suche (wie ich gerade tat): Dieses Verhalten wird nicht mehr von Schienen unterstützt. Sie erhalten eine Verwarnungswarnung. Der neue Weg für Collections besteht darin, die Methode 'reload' für den Collection-Proxy zu verwenden. – klaustopher
@klaustopher Danke. Meine Antwort wurde aktualisiert. –
"ABWEICHUNGSWARNUNG: Das Übergeben eines Arguments zum Erzwingen einer Zuordnung zum erneuten Laden ist jetzt veraltet und wird in Rails 5.1 entfernt. Rufen Sie stattdessen' reload' für das übergeordnete Objekt auf. (Von bei (m) abgerufen: 2) " –
Dorian