Rails 3: Validate kombinierten Werte
Frage
In Rails 2.x Sie Validierungen verwenden können, um sicherzustellen, dass Sie einen einzigartigen kombinierten Wert wie folgt aus:
validates_uniqueness_of :husband, :scope => :wife
In der entsprechenden Migration könnte es so aussehen:
add_index :family, [:husband, :wife], :unique => true
Dies würde sicherstellen, dass die Mann / Frau-Kombination in der Datenbank eindeutig ist. Nun, in Rails 3 die Validierung Syntax geändert, und das Attribut scope scheint verschwunden zu sein. Es sieht nun so:
validates :husband, :presence => true
Jede Idee, wie ich die kombinierte Validierung in Rails erreichen kann 3? Die Schienen 2.x Validierungen noch Arbeit in Rails 3 so dass ich immer noch das erste Beispiel verwenden kann, aber es sieht so „alt“, gibt es bessere Möglichkeiten?
Lösung
Bär mit mir. Die Art und Weise das Verfahren validates in ActiveModel funktioniert, ist zu sehen für einen Validator.
:presence => true
sieht für PresenceValidator
und übergibt die Optionen. true
auf die initializer der Validator
Ich glaube, Sie wollen
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(Die Einzigartigkeit Validator ist eigentlich ein Teil von Active, nicht ActiveModel. Es ist wirklich interessant, wie die Entwickler setzen Sie diesen auf. Es ist sehr elegant.)