Rails 3: Convalida valori combinati
Domanda
In Rails 2.x è possibile utilizzare le convalide per assicurarsi di avere un valore combinato unico come questo:
validates_uniqueness_of :husband, :scope => :wife
Nella migrazione corrispondente che potrebbe assomigliare a questo:
add_index :family, [:husband, :wife], :unique => true
Ciò assicurarsi che la combinazione marito / moglie è univoco nel database. Ora, in Rails 3 la sintassi convalida cambiato e l'attributo scope sembra essere andato. Ora sembra:
validates :husband, :presence => true
Qualsiasi idea di come posso ottenere la validazione combinata in Rails 3? The Rails convalide 2.x lavorano ancora in Rails 3 in modo da poter ancora utilizzare il primo esempio, ma sembra così "vecchio", ci sono modi migliori?
Soluzione
Orso con me. Il modo in cui il metodo Convalida in ActiveModel funziona è quello di cercare un Validator.
:presence => true
cerca PresenceValidator
e passa le opzioni:. true
alla inizializzazione del validatore
Penso che si desidera
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(Il validatore unicità è in realtà parte di ActiveRecord, non ActiveModel. E 'davvero interessante come gli sviluppatori impostare questa funzione. E' abbastanza elegante.)