tutorial signup sign_in rails method instalar ejemplos auth ruby-on-rails validation devise

signup - Ruby on Rails/Devise: omitir la opción de validación personalizada en el modelo al restablecer la contraseña



instalar devise rails (3)

En mi proyecto, alteré el formulario de registro en Devise para agregar una opción: acordar a través de un descriptor de acceso (el usuario debe aceptar los términos de servicio para registrarse, etc.). Si no están de acuerdo, no valida.

Eso causó un problema cuando un usuario intentó editar la información de su cuenta cuando buscaba: acordar validación, pero pude agregar una cláusula ''a menos'' y agregué otro acceso llamado: signed_in que está definido en el controlador (no pude) Para averiguar cómo conseguir que el modelo determine si el usuario inició sesión o no, los ayudantes del diseñador no funcionarían para mí. Las partes relevantes de mi modelo de usuario y control de usuarios parecen ...

usuario.rb

validates :agree, :term_agreement => TRUE, :unless => :signed_in

users_controller.rb

def update @user = User.find(params[:id]) if user_signed_in? @user.signed_in = params[:user] end [...] end

Entonces, todo funciona bien ... la validación "de acuerdo" anula cuando un usuario ya inició sesión. Sin embargo, tengo que encontrar la mejor manera de anular otro escenario ... cuando un usuario restablece su contraseña y necesita cambiarla. eso.

Estaba probando cuentas de usuario y traté de restablecer mi contraseña en una cuenta, sin embargo, recibí la siguiente confirmación: acordar la validación ... ahora tengo que encontrar la manera de anularla. Noté que el formulario Cambiar su contraseña tiene un valor de campo oculto de: reset_password_token, sin embargo lo intenté: unless =>: reset_password_token pero no funcionaría.

Entonces, ¿cuál es la mejor manera de lograr esto? Además de eso, ¿cómo puedo tener una condición de ambos lados (a menos que: signed_in o: reset_password, etc.) para eso: a menos cláusula?


Entonces, ¿necesita validar la aceptación de los términos cuando se crea el registro?

class User < ActiveRecord::Base validates :agree, :acceptance => true, :on => :create end

:on => :create solo realizará esa validación cuando se cree el registro, muy parecido a la respuesta de Brandon, pero sin código redundante.

Esto también evitará la necesidad de que sus controladores se preocupen si un usuario inicia sesión o no.



Prefiero basar este tipo de cosas en si el registro es nuevo o no (que es la única vez que el usuario se "registrará").

class User < ActiveRecord::Base validates :agree, :term_agreement => TRUE, :if => :signing_up? # Return true if the user is currently signing up def signing_up? new_record? end end

La clave es tener en cuenta que el valor de :if y :unless sea ​​"un método, proceso o cadena para llamar para determinar si la validación debería [o no] ocurrir", por lo que puede definir métodos en su modelo para este propósito.