Überspringen Sie Validierungen während einer reinen Datenmigration, um Validierungsfehler zu beheben

7

In Schienen habe ich eine Auswanderung, um Produktionsdaten so anzupassen, dass sie neuen Validierungsregeln entsprechen. Es gibt mehrere Dinge falsch, also habe ich zwei verschiedene Migrationen (sie könnten eine sein, aber immer noch zwei Aspekte, die separat ausgeführt werden), weil die andere Validierung nicht funktioniert traf und umgekehrt

Die Validierung ist neu im Modell wie

%Vor%

ist eine Art, die völlig neu ist und der andere hat gerade von 24 auf 8 gewechselt und das Überstunden-Bit hinzugefügt

%Vor%

Ich habe versucht, die Migrationen zu bestellen, und ich habe das umgekehrte Ergebnis erhalten.

Gibt es eine andere Möglichkeit, als zuerst die Datenbank zu aktualisieren und dann diese Datei zu aktualisieren, um diese zu umgehen? oder sollte ich das tun?

    
loosecannon 11.02.2011, 00:01
quelle

2 Antworten

21

in Rails 2:

%Vor%

in Rails 3 & amp; 4:

%Vor%

Diese Methoden umgehen alle Validierungen auf dem Objekt, also seien Sie vorsichtig!

    
Chris Young 11.02.2011, 00:52
quelle
1

Hey ich weiß, das ist eine alte Frage und ist schon beantwortet, aber basierend auf deinen Kommentar dachte ich, ich würde meine zwei Cent verlassen.

Es gibt in Rails 2 oder 3 keine Möglichkeit, eine einzelne Validierung ein- oder auszuschalten. In unseren Projekten verwenden wir jedoch umfangreich Populationsaufgaben. Daher haben wir eine kleine Problemumgehung für dasselbe.

Es ist ein wenig mühsam, wenn Sie es für jede einzelne Validierung tun wollen, aber im Allgemeinen sind die, die Sie für ein bisschen ausschalten wollen, nur wenige und weit entfernt.

%Vor%

Wenn Sie einer starken Namenskonvention folgen, können Sie bei der Erstellung eines Objekts einfach den entsprechenden dont_check_ * validation_name * auf true setzen und die Validierung umgehen.

Auch für Ihren zweiten Kommentar:

%Vor%

funktioniert auf die gleiche Weise.

Und natürlich funktioniert die erwähnte bedingte Validierung auch bei beiden.

    
Varun Vohra 08.10.2012 13:30
quelle