Ich habe ein User.rb-Modell und ein UserSetting.rb-Modell, an das ich delegieren möchte (sowohl Getter- als auch Setter-Methoden).
in Benutzer.rb
%Vor%Auf den ersten Blick funktioniert das großartig.
%Vor% Aber bei näherer Betrachtung wird user.save
nicht an das UserSetting-Modell weitergegeben.
(Der Wert wurde nicht in der Datenbank gespeichert).
Das ist meine Frage: Wie kann ich UserSetting automatisch speichern lassen, wenn eines seiner Attribute geändert und dann von seinem Benutzer gespeichert wird?
Dies sollte nur passieren, wenn ein UserSetting-Attribut geändert wird. Andernfalls wird jedes Mal, wenn ein Benutzer in der Datenbank gespeichert wird, ein zusätzliches, nicht benötigtes & amp; unerwünschtes Schreiben in die Datenbank.
Ich würde dafür einen ActiveRecord Callback ausprobieren. Ich bin nicht sicher, was in Ihrem Fall am sinnvollsten wäre, aber before_update
oder after_update
scheinen logisch. In Ihrem Rückruf müssen Sie manuell einen Speicheraufruf für das UserSetting-Objekt auslösen, das dem Benutzer zugeordnet ist. Es gibt wahrscheinlich Dutzende von Möglichkeiten, dies zu erreichen, aber etwas in dieser Richtung sollte funktionieren:
Verwenden Sie in Ihrem Benutzermodell für die Verknüpfung user_setting die Option autosave: true
%Vor%Tags und Links ruby ruby-on-rails activerecord