Rails 3: Validar valores combinados
Pergunta
No Rails 2.x, você pode usar as validações para garantir que tenha um valor combinado exclusivo como este:
validates_uniqueness_of :husband, :scope => :wife
Na migração correspondente, poderia ser assim:
add_index :family, [:husband, :wife], :unique => true
Isso garantiria que a combinação de marido/esposa seja única no banco de dados. Agora, nos trilhos 3, a sintaxe da validação alterou e o atributo de escopo parece ter desaparecido. Agora parece:
validates :husband, :presence => true
Alguma idéia de como posso alcançar a validação combinada no Rails 3? As validações do Rails 2.x ainda funcionam no Rails 3, para que eu ainda possa usar o primeiro exemplo, mas parece tão "velho", existem maneiras melhores?
Solução
Tenha paciencia comigo. A maneira como o método valida no ActiveModel Works é procurar um validador.
:presence => true
procura PresenceValidator
e passa as opções: true
para o inicializador do validador.
Eu acho que você quer
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(O validador de singularidade faz parte do ActiveRecord, não do ActiveModel. É realmente interessante como os desenvolvedores configuram isso. É bastante elegante.)