2011-05-16 14 views
6

Tengo la gema client_side_validations funcionando realmente bien en mis formularios. Estoy usando Devise para mi modelo de usuarios y cuando voy al formulario edit_user_registration, se generan validaciones para todo, excepto los campos: current_password,: password y: password_confirmation.Rails 3: client_side_validations gema y diseñar validaciones de contraseña

La instancia de Fort es dejo en blanco el correo electrónico, la validación aparece cuando saco la pestaña fuera del campo. Sin embargo, si dejo el campo actual_password en blanco y no aparece nada, al enviar el formulario recibo el error "1 error prohibió que este usuario se guarde: la contraseña no puede estar en blanco"

Gracias por cualquier ayuda

http://pastie.org/1907464

Respuesta

14

Actualmente ClientSideValidations filtrará los validadores condicionales. Devise establece algunos de los validadores como condicionales: https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb#L24-32

La razón por la que hice esto es porque no hay una buena manera para que el cliente determine el verdadero valor de ese condicional. Podría hacerlo en el momento en que se genera el formulario, pero ¿qué pasaría si ese condicional dependiera de un valor que podría modificarse en el formulario? Así que opté por filtrarlos y dejar que las cosas vuelvan al servidor.

Esa fue la idea pero claramente ha impuesto limitaciones injustas en algunas cosas. Este es el más obvio (y popular).

Así que planeo lanzar una nueva versión muy pronto que le permitirá anular explícitamente los filtros condicionales. Que funcionará como esto:

<%= f.text_field :password, :validate => { :presence => true, :confirmation => true } %> 

o

<%= f.text_field :password, :validate => true %> 

En el primer caso se puede elegir la que los validadores para girar el filtro. En el segundo caso apagará el filtro para todos los validadores en ese atributo. El condicional se evaluará en el momento en que se genera el formulario y, si pasa, agregará el validador al elemento de entrada para usar en el cliente.

+0

Intenté recientemente utilizar su enfoque sugerido, lamentablemente no funcionó. Terminé agregando esto a mi modelo: 'if we_need_to_validate_some_more; validates_presence_of: not_always_important_field; fin'. Funciona como un encanto en el lado del servidor y es recogido por tu joya. – dimitarvp

+0

este comentario fue de hace más de un año, es probable que ya no sea válido – bcardarella

4

La rama principal ahora es compatible con este formato. Apunte su Gemfile a él y usted debe ser bueno

+0

Muchas gracias lo tengo trabajando ahora. Nota al margen: ¿hay alguna manera de mostrar un aviso de cuándo pasa una validación? Entonces, ¿podría estilizarlo con rojo para el fracaso y verde para el éxito? –

+0

Querrá usar las devoluciones de llamada para eso. https://github.com/bcardarella/client_side_validations/wiki/Callbacks – bcardarella

+0

Hola, me he dado cuenta de que las validaciones_clientes_clientes solo se invocan en <% = f.password_field: password%> y no en <% = f.password_field: password_confirmation%>. Por lo tanto, si cierro el campo password_confirmation, no se mostrará nada. ¿Hay alguna manera de obtener una validación para que la contraseña y la confirmación de la contraseña coincidan? ¿O al menos una validación de presencia para password_confirmation? –

0

¡Es simple! La gema amplía el creador de formularios predeterminado de Rails, y todo lo que tienes que hacer es establecer una opción: validate => true en cualquier etiqueta form_for (o simple_form_for para usuarios de formularios simples) para los que quieras las validaciones en línea. El generador de formularios utiliza algunos reflejos de rieles en las validaciones de su modelo para generar algunos json que se incluyen en una etiqueta de secuencia de comandos después de su formulario. El JSON es luego utilizado por el marco Javascript de la gema para realizar las validaciones que deben realizarse.

<%= form_for(@user, :url => registration_path(resource_name), :validate => true) do |f| %> 
Cuestiones relacionadas