2016-06-27 10 views
2

Ich baue eine Anwendung, in der ich einen Modellbenutzer habe, In der ersten Version der Anwendung wird es keine Handynummer Spalte für die Benutzer in der späteren Version muss es vorhanden sein, gibt es keine Möglichkeit, Modellen Versionierung hinzuzufügen, so dass die Validierung aktiver Datensätze in eine bestimmte Version geschrieben werden kann.API Versionierung für aktive Modelle

Antwort

1

Halten Sie die alten Benutzer intakt und Unterklasse die neuen Benutzer. Da ActiveRecord die Vererbung einzelner Tabellen unterstützt, wird die Datenbank eine neue Spalte namens type haben, um zwischen alten und neuen Benutzern zu unterscheiden. Und Ihre Validierung wird nur für die neuen Benutzer sein.

Wenn Sie sie als unterschiedliche Klassen beibehalten, spiegelt das Ihr Geschäftsmodell wider, dass die alten Benutzer keine Handynummer haben.

+0

Das mag eine der Lösungen sein, aber was ich erwarte ist, gibt es eine Möglichkeit, den aktiven Modellen Versionierung hinzuzufügen, um die Validierung zu erwähnen, anstatt eine Spalte zur Tabelle hinzuzufügen, zum Beispiel mit 'validates_presense_of: mobile_number' nur für die zweite Version. –

+0

Wenn sich eine * Version * anders verhält als eine andere Version, werden entweder Bedingungen in den Code geschrieben ('if' oder [' case'] (http://ruby-doc.com/docs/ProgrammingRuby/html/tut_expressions.html#) S5) Aussagen) oder Sie verwenden Vererbung und polymorphe Methoden, um die Unterschiede auszudrücken. Da alle neuen Benutzer verwendet werden können, wenn der Code einen alten Benutzer erwartet, glaube ich, dass neue Benutzer ** alte Benutzer nach dem [Liskov-Substitutionsprinzip] sind (https://en.wikipedia.org/wiki/Liskov_substitution_principle). – wigy