Eu tenho um Release
modelo com medium
e country
colunas (entre outros). Não deve haver releases
partes medium
/ country
combinações idênticas .
Como eu escreveria isso como uma validação de trilhos?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-4
activerecord
rails-activerecord
Jackson Cunningham
fonte
fonte
Respostas:
Você pode usar uma validação de exclusividade com a
scope
opçãoAlém disso, você deve adicionar um índice exclusivo ao banco de dados para impedir que novos registros passem nas validações quando verificados ao mesmo tempo antes de serem gravados:
fonte
unique
que não é reconhecido. Para essa parte, usei a resposta abaixo.uniqueness
, nãounique
. Consulte a documentação vinculada. Corrigindo a resposta.Todas as respostas acima estão faltando como validar a exclusividade de vários atributos em um modelo. O código abaixo pretende dizer como usar vários atributos em um escopo.
Valida a exclusividade de
country
todas as linhas com valores demedium
eanother_medium
.Nota: Não se esqueça de adicionar um índice na coluna acima, isso garante recuperação rápida e adiciona uma validação no nível do banco de dados para registros exclusivos.
Atualização: Para adicionar um índice ao criar tabela
fonte
Você pode passar um
:scope
parâmetro para o seu validador como este:Veja a documentação para mais alguns exemplos.
fonte