2010-02-10 7 views
15

Necesito una casilla de verificación "Acepto términos de servicio" en una página, debe verificarse para que la orden continúe. Por lo tanto, parece ilógico tener una columna en la base de datos para que coincida con esto (si el usuario ha aceptado o rechazado los términos).Casilla de verificación de términos y condiciones, sin columna en la base de datos

Estoy utilizando el asistente de formulario como éste en mi opinión:

<%= check_box("client", "terms") %> 

Y en mi modelo:

validates_acceptance_of :terms 

Por el momento no funciona en absoluto.

Esto parece una pieza de código muy común, pero no puedo encontrarlo en ningún lado sin tener los términos en el modelo. De lo contrario, podría usar javascript para validarlo, pero preferiría mantenerlo todo en el modelo.

+0

Javascript se puede desactivar, así que no puedes confiar en eso para validar. –

Respuesta

12

Esto debería funcionar bien, sin una columna de base de datos o attr_accessor: http://guides.rubyonrails.org/active_record_validations.html#acceptance

me inclinaría para comprobar su hash de params es como debe ser, es decir, que el atributo 'términos' se está pasando dentro del 'cliente 'hash, quizás intente agregar raise params.inspect en su controlador crear acción para ayudarlo a depurar?

+0

¡Saludos, esto funcionó muy bien, y aprendí un poco sobre degublación! – vectran

+0

La guía Enlace a los rieles está rota – CharlesJHardy

+0

Se corrigió el enlace - gracias a ChuckJHardy –

5

¿Qué tal tener un attr_accessor :terms en su modelo de cliente?

+0

¡Gracias! Esto funcionó para mí, ya que no lo incluí en mi attr_accessor, por lo que no se pasó por la validación. –

0

o bien ir con una solución de @ neutrinos, o para restablecer: términos de "no aceptado" si es necesario para volver a mostrar la forma (porque la validación puede fallar), utilice la siguiente:

def terms 
    nil 
end 

def terms=(val) 
    # do nothing 
end 
0

Tenía esta trabajando con estos valores:

En el controller, he añadido: TERMS_OF_SERVICE como un campo permitido:

def application_params 
    params.require(:application).permit(. . . , :terms_of_service) 
end 

En el model:

attr_accessor :terms_of_service 
validates :terms_of_service, :acceptance => true 

En el view:

<%= f.check_box("terms_of_service", :checked => false) %> 
Cuestiones relacionadas