2011-08-27 14 views
10

estoy usando la gema permanent_records en mis rieles 3.0.10 aplicación, para evitar eliminaciones duras y parece rieles está haciendo caso omiso de mi ámbito predeterminado en el control de la unicidadRails 3 singularidad validar ignora ámbito predeterminado en el modelo

# user.rb 
class User < AR::Base 
    default_scope where(:deleted_at => nil) 

    validates_uniqueness_of :email # done by devise 
end 

En mi consola de rails, tratar de encontrar a un usuario por correo electrónico que se ha eliminado da como resultado nulo, pero cuando se registra para una nueva cuenta con una dirección de correo electrónico eliminada, se produce un error de validación en el campo del correo electrónico.

Este es también el caso de otro modelo en mi aplicación

# group.rb 
class Group < AR::Base 
    default_scope where(:deleted_at => nil) 
    validates_uniqueness_of :class_name 
end 

y que es el mismo caso que antes, la eliminación de un grupo, entonces tratar de encontrar por los resultados nombre de clase en nula, sin embargo cuando intento para crear un grupo con un nombre de clase borrado conocido falla la validación.

¿Alguien sabe si estoy haciendo algo mal o debería simplemente escribir validadores personalizados para este comportamiento?

Respuesta

10

Trate establecer el ámbito del control de la unicidad con deleted_at

validates_uniqueness_of : email, :scope => :deleted_at 

Esto puede permitir que dos registros con el mismo valor de correo electrónico, siempre y cuando deleted_at campo es diferente para ambos. Mientras que delete at se rellene con la marca de tiempo correcta, que supongo que permanent_records gem lo hace, esto debería funcionar.

+4

Bueno, simplemente no olvides que "validates_uniqueness_of" está en desuso en los rieles 3. usa "validates: email,: unicidad => {: scope =>: deleted_at}" en su lugar. – sandrew

+0

¿no llama al mismo validador de todos modos ...? – Jimmy

+0

Voy a marcar esto como correcto ya que estaría perfectamente bien, por suerte anoche en lugar de pensar las cosas, escribí mi propio validador de exclusividad que funciona bien – Jimmy

Cuestiones relacionadas