ruby-on-rails - que - ruby on rails tutorial
Rieles: valide la unicidad de dos columnas(juntas) (3)
A todas las respuestas anteriores les falta cómo validar la unicidad de múltiples atributos en un modelo. El siguiente código tiene la intención de decir cómo usar múltiples atributos en un ámbito.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Valida la unicidad del
country
en todas las filas con valores de
medium
y
another_medium
.
Nota: No olvide agregar un índice en la columna anterior, esto asegura una recuperación rápida y agrega una validación de nivel de base de datos para registros únicos.
Tengo un modelo de
Release
con columnas
medium
y de
country
(entre otras).
No debe haber
releases
que compartan combinaciones idénticas de
medium
/
country
.
¿Cómo escribiría esto como una validación de rieles?
Puede pasar un parámetro
:scope
a su validador de esta manera:
validates_uniqueness_of :medium, scope: :country
Vea la documentation para algunos ejemplos más.
Puede usar una validación de
uniqueness
con la opción de
scope
.
Además, debe agregar un índice único a la base de datos para evitar que nuevos registros pasen las validaciones cuando se verifiquen al mismo tiempo antes de escribirse:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end