validación de rails 3 sobre unicidad en múltiples atributos


177

Yo uso Rails 3.0.0.beta4

Quiero agregar una validación de unicidad en dos atributos, eso significa que mi modelo es válido si el par de 'recorded_at'y 'zipcode'es único.

En un atributo aquí está la sintaxis

validates :zipcode, :uniqueness => true

Gracias

Respuestas:


333

En Rails 2, habría escrito:

validates_uniqueness_of :zipcode, :scope => :recorded_at

En Rails 3:

validates :zipcode, :uniqueness => {:scope => :recorded_at}

Para múltiples atributos:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

77
Diría que, lógicamente, tiene más sentido decir que es necesario recorded_atser único dentro del alcance de un código postal. validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan

2
todavía puede hacerlo en los rieles de 2 vías, y me parece más legible a menos que esté haciendo varios tipos de validación en la misma propiedad.
zem

24
¿Validarías un grupo de tres con validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
Greg Guida

55
Agregaría que si desea usar :scopeen claves foráneas, debe usar los :fkey_idsímbolos, en lugar de :fkeyunos, incluso si un "básico" :uniquenessfunciona:fkey
nbarraille

1
Probablemente desee agregar un , :message => ' is taken for this recorded date'
mensaje de

96

Parámetros de alcance múltiple:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

Esto debería responder la pregunta de Greg.


Greg parecía más interesado en usar el acceso directo "valida", por lo que una respuesta más rápida a su pregunta es "sí"
elc

Es muy importante saber esto, estaba buscando exactamente esto si debería usar el _id (o no) al buscar asociaciones en ámbitos.
Francesco Belladonna

Esta respuesta funciona en Rails 4.1.6 validates_uniqueness_of: cart_id, scope: [: location_id,: plug_id]
Conor

6

No funciona para mí, necesito poner el alcance en plural

validates_uniqueness_of: teacher_id,: scope s => [: semester_id,: class_id]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.