update-attributes

___ answer13016198 ___

Ich bin heute auf dieses Problem gestoßen und habe schließlich meinen eigenen Serializer zusammen mit einem Getter und Setter gehackt. Zuerst habe ich das Feld in %code% umbenannt und dann den folgenden Code im Modell verwendet (für das Attribut %code% in meinem Fall).

%Vor%

Nun funktionieren Teilupdates für mich großartig, und das Feld wird nur aktualisiert, wenn die Daten tatsächlich geändert werden.

    
___ qstntxt ___

Dies ist wahrscheinlich eines der Dinge, die alle neuen Benutzer früher oder später über Rails erfahren. Ich habe gerade festgestellt, dass rails alle Felder mit dem Schlüsselwort serialize aktualisiert, ohne zu überprüfen, ob sich wirklich etwas im Inneren geändert hat. In einer Weise, die für den generischen Rahmen sinnvoll ist.

Aber gibt es eine Möglichkeit, dieses Verhalten zu überschreiben? Wenn ich verfolgen kann, ob sich die Werte in einem serialisierten Feld geändert haben oder nicht, gibt es eine Möglichkeit, zu verhindern, dass es in der Update-Anweisung verschoben wird? Ich habe versucht, "update_attributes" zu verwenden und den Hash auf die Interessenfelder zu beschränken, aber rails aktualisiert weiterhin alle serialisierten Felder.

Vorschläge?

    
___ qstnhdr ___ Gibt es eine Möglichkeit zu verhindern, dass serialisierte Attribute in Rails aktualisiert werden, auch wenn es keine Änderungen gibt? ___ answer10646554 ___

Hier ist eine ähnliche Lösung für Rails 3.1.3.

Von: Ссылка

Fügen Sie den folgenden Code in config / initializers /

ein %Vor%     
___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungsframework, das in Ruby geschrieben wurde. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123rubyonrails3 ___ Ruby on Rails ist ein in Ruby geschriebenes Open-Source-Web-Entwicklungs-Framework. Ruby on Rails folgt dem Prinzip der Konvention über die Konfiguration und befreit Sie davon, Dinge neu erfinden zu müssen, um produktiv zu bleiben. Verwenden Sie dieses Tag nur für Rails 3-spezifische Fragen und markieren Sie diese Fragen [ruby-on-rails]. ___ tag123serialization ___ Serialisierung ist der Prozess, mit dem Datenstrukturen in ein Format konvertiert werden, das leicht gespeichert oder übertragen und anschließend rekonstruiert werden kann. ___ answer8986429 ___

Ja, das nervte mich auch. Dies habe ich für Rails 2.3.14 (oder niedriger) getan:

%Vor%

Dann verwenden Sie in Ihrem Controller:

%Vor%

Oder definieren Sie es in Ihrem Modell, wenn Sie nach der Erstellung keine Änderungen am serialisierten Feld erwarten (aber update_attribute (: serialized_field = & gt; "update me" funktioniert immer noch!)

%Vor%     
___ answer13771167 ___

Das Problem mit Joris 'Antwort ist, dass es sich in die %code% -Kette einklinkt und alle nachfolgenden Ketten deaktiviert (wie %code% , was für die Probleme verantwortlich ist, dass Trigger nicht aufgerufen werden). Ich werde versuchen, ein Diagramm zu machen, um es leichter zu verstehen.

Sie können mit einer solchen Kette beginnen

%Vor%

Beachten Sie, dass %code% auf %code% und %code% auf %code%

zeigt

Da Sie %code% nicht direkt an den inneren Funktionen von %code% ändern können, versuchen Sie, sich in die Kette einzuklinken, indem Sie einen neuen Link (bar2) hinzufügen und update_without_bar aufrufen, also:

%Vor%

Leider erhalten Sie die folgende Kette:

%Vor%

Also update_with_foo ist weg!

Wenn Sie wissen, dass %code% es Ihnen nicht erlaubt, %code% methods neu zu definieren, war meine Lösung bisher, %code% neu zu definieren und die Attributauswahl dort vorzunehmen.

    
___ tag123updateattribute ___ hilf uns dieses Wiki zu bearbeiten ___ answer30460918 ___

Nicht ganz eine Lösung, aber in vielen Fällen war es für mich eine gute Lösung, einfach die serialisierten Spalten in ein zugehöriges Modell zu verschieben - oft passte das eigentlich schon semantisch dazu.

    
___ answer19418758 ___

Es gibt auch Diskussionen in Ссылка .

    
___
6
Antworten

Gibt es eine Möglichkeit zu verhindern, dass serialisierte Attribute in Rails aktualisiert werden, auch wenn es keine Änderungen gibt?

Dies ist wahrscheinlich eines der Dinge, die alle neuen Benutzer früher oder später über Rails erfahren. Ich habe gerade festgestellt, dass rails alle Felder mit dem Schlüsselwort serialize aktualisiert, ohne zu überprüfen, ob sich wirklich etwa...
05.01.2012, 15:39