validations validates_uniqueness_of validate than rails greater errors custom ruby-on-rails validation

ruby-on-rails - validates_uniqueness_of - rails validations message



Rieles-validaciĆ³n de rieles de riel para subclase (1)

Tengo una clase de Usuario y un Contacto donde Contacto es una subclase de Usuario. Ambas clases se almacenan en una tabla de usuarios.

Mis contactos pueden o no tener una dirección de correo electrónico, mientras que para mis usuarios se requiere una dirección de correo electrónico (tengo validates_presence_of :email en la definición de mi modelo de usuario).

Mi razonamiento es que los Contactos ingresan a los Contactos y luego pueden convertirse en Usuarios cuando reclaman su perfil.

  • En primer lugar, ¿está bien definir a mis usuarios y contactos como lo hice?
  • En segundo lugar, ¿cómo puedo omitir la validate_presence_of email en mi modelo de contactos?

(Estoy sobre rieles 2.3.8)

¡Gracias!

ACTUALIZAR:

  • Parece que la herencia de una sola tabla está diseñada para hacer exactamente lo que necesitaba

  • La forma correcta de omitir la validación de la presencia de correo electrónico en mi tabla de contactos es la siguiente:

validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}


Parece que debes abstraer al Usuario y a los Contactos en dos tablas en lugar de tratar de consolidarlos en una sola. Aunque los contactos pueden convertirse en usuarios, eso no significa que lo harán (¿creo?).

Esto también resolvería tu pregunta de validate_presence_of :email , ya que la tabla / modelo de contacto ni siquiera tendría el campo. También aliviaría posibles problemas de rendimiento más adelante, creo. No querría tener un montón de contactos para buscar un usuario registrado.

Sin embargo, si estás decidido a hacerlo en una mesa, creo que puedes hacer algo como lo siguiente:

validates_presence_of :email, :unless => Proc.new {|user| user.type == "Contact"}

Esto es asumiendo que usted tiene una columna de tipo de usuario, pero podría reemplazarla dependiendo de cómo determine si un User es un Contact .

Actualización :

Así es como validaría correctamente los modelos: elimine validates_presence_of del modelo y colóquelo dentro de este bloque:

with_options :unless => :user_type == "contact" do |user| user.validates_presence_of :email end