Ich habe ein Modell, das eine Anzahl von has_many und has_many: durch Modellbeziehungen hat. Zum Beispiel in meiner Klasse User Ich habe:Erkennen von Änderungen in einem Schienen has_many: durch Beziehung
has_many: Sprachen, durch: profile_languages
Was würde ich ist gerne in der Lage sein zu erkennen, wenn diese hinzugefügt oder entfernt werden mit der Funktion ‚User.changes‘ , die ein Array von Attributen zurückgibt, die beim Aufruf mit der Funktion User.language_ids = geändert wurden.
Hat jemand anderes versucht, dies zu tun, oder haben Sie Erfahrung damit?
Info auf der ActiveModel ändert Funktion: http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
Edit: Wie gewünscht, hier ist das, was ich tue.
Nachdem die Attribute eines Benutzers zugewiesen und bevor es gespeichert wird, schaue ich alle von den .changes zurückgegebenen Werte an, um alle in einem externen Protokoll vorgenommenen Änderungen zu protokollieren.
Also, wenn ich rufe u.name = "neuen Namen"
dann u.changes kehrt {name: [ 'alte Name', 'new name']}
Allerdings, wenn ich ein Pass Benutzer eine Reihe von Sprach-IDs, wie
u.language_ids = [4,5]
Dann gibt es eine Reihe von ProfileLanguage Modelle erstellt und die u.changes Hash wird leer gelassen.
Ich versuche, einige Callbacks im ProfileLanguage-Modell zu erstellen, das manuell eine Art Hash erstellen würde, aber ich frage mich, ob dies tatsächlich die beste Lösung ist.
Hallo Ron, kannst du bitte etwas genauer zu deiner Frage sein? Vielleicht zeigen Sie uns, was Sie bisher aufgebaut haben, damit wir etwas haben können. – Noz
Haben Sie Rückrufe oder Beobachter untersucht? – Ari
Eine Bearbeitung hinzugefügt. Hoffentlich kann es klären –