2011-06-26 8 views
5

¿Cómo solicito que una contraseña tenga una longitud mínima cuando se utiliza has_secure_password en Rails 3.1? Traté de hacer:has_secure_password: cómo solicitar la longitud mínima

class User < ActiveRecord::Base 
    ... 
    validates :password, presence: { on: create }, length { minimum: 8 } 
    ... 
end 

pero luego falla la validación con la contraseña "demasiado corto" en la actualización cuando la contraseña no se proporciona en forma params. Para otros atributos, la longitud solo se valida si se proporciona el valor para el campo. ¿Es esto un error en la implementación has_secure_password o estoy haciendo algo mal?

Respuesta

4

Usted debe hacer algo como:

validates :password, presence: { on: create }, length { minimum: 8 }, :if => :password_changed? 
+1

Gracias por la pista. Creo que quieres decir: validates: password, presence: {on: create}, length {minimum: 8, if: password_digest_changed? }. Si hiciera lo siguiente: si al final como sugiere, valida: la presencia podría no estar activa en crear. No hay un método password_changed? ya que estoy usando has_secure_password - ¿el método relevante es password_digest_changed ?. Este es un error en Rails 3.1.rc4, ¿verdad? – Peder

+3

Hola, bien hecho :) No creo que sea un error, 'password' en tu caso parece ser un atributo virtual y métodos como' changed? 'Solo existen para filas de db – apneadiving

Cuestiones relacionadas