Rails 3.2.13 vs Rails 4.0.1 - geändert? Methode geändert?

8

Ich habe kürzlich festgestellt, dass sich die Methode changed? auf ActiveRecord-Objekten zwischen Rails 3.2.13 und Rails 4.0.1 geändert hat. Das Problem besteht darin, dass Felder mit Integer-Feldern in der Datenbank verbunden sind. Angenommen, ich habe das Modell Model mit number ganzzahliges Feld:

%Vor%

Dies führt zu einer Reihe extrem ärgerlicher Probleme mit Formularvalidierungen - wenn ein Benutzer versucht, den Integer-Wert so zu ändern, dass er ungültige Zeichen enthält (aber der Cast-Typ wird denselben Wert wie der ursprüngliche Wert haben), ruft rails% nicht auf. Die Methode "co_de%" und keine Validierung (einschließlich save ) werden ausgeführt.

Ich habe es geschafft, dieses Problem zu umgehen, indem ich numericality: { only_integer: true } method auf number_changed? überschreiben, aber das ist extrem hässlich.

Die Frage ist: Warum wurde das geändert? Ist es ein Fehler oder eine absichtliche Änderung? Wie kann es behoben werden, ohne alle Meta-Methoden für Integer-Spalten zu überschreiben?

    
BroiSatse 13.04.2014, 13:31
quelle

1 Antwort

1

Ich bin mir nicht sicher, wie Sie Ihre Validierungen durchführen, aber ich habe ein Modell in meiner Rails-App, das ExtraField genannt wird und die folgende Validierung hat:

%Vor%

Ich verwende Schienen 4.0.5 und ich kann Folgendes tun:

%Vor%

Obwohl der Datensatz in der Tat nicht als geändert markiert ist (was IMHO korrekt erscheint), kann ich trotzdem meine Validierungen ausführen und prüfen, ob das Modell nicht gültig ist. Sieht nicht wie ein Fehler für mich aus, sondern nur eine absichtliche Verbesserung.

Wenn Ihr Formular nur dann validiert, wenn das Modell auf changed? reagiert, sollten Sie Ihren Controller-Code überprüfen. Oder, wenn Sie einen Edelstein verwenden, um die Form zu erstellen, könnte es ein Fehler in diesem Edelstein sein, denke ich.

    
oesgalha 08.05.2014, 12:47
quelle