Client side validations with Devise

心已入冬 提交于 2019-12-07 19:44:33

问题


I am trying to use the client_side_validations gem with Devise to validate devise registrations form.

Validations work fine with everything else just not the Devise generated form.

I added the relevant :validate => true but the validations only work when I hit submit not on tab like they do on every other form.

<h2>Sign up</h2>
<hr />

<%= form_for(resource, :validate => true, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :username %>
  <%= f.text_field :username %></div>

  <div><%= f.label :email %>
  <%= f.email_field :email %></div>

  <div><%= f.label :password %>
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation %></div>

  <br />

  <div><%= f.submit "Sign up", :class => "btn btn-primary btn-large" %></div>
<% end %>

<%= render "links" %>

回答1:


Argc, argv! I am using Rails 3.2.1, the latest release of the gem is incompatible with 3.2 hence the nightmare. Using 3.2.0.beta.2 fixes the problems. Thanks!




回答2:


Try to put the :validates => true on your fields directly, like this :

<h2>Sign up</h2> 
<hr />

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>   
  <%= devise_error_messages! %>

  <div>
    <%= f.label :username %>   
    <%= f.text_field :username, :validate => true %>
  </div>

  <div>
    <%= f.label :email %>   
    <%= f.email_field :email, :validate => true %>
  </div>

  <div>
    <%= f.label :password %>   
    <%= f.password_field :password, :validate => true %>
  </div>

  <div>
    <%= f.label :password_confirmation %>   
    <%= f.password_field :password_confirmation, :validate => true %>
  </div>

  <br />

  <div>
    <%= f.submit "Sign up", :class => "btn btn-primary btn-large" %>
  </div> 
<% end %>

<%= render "links" %>



回答3:


change the line

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

to

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



回答4:


I haven't used client_side_validations gem extensively yet. But from the look of it, it needs to have data-validate="true" in the form (and form elements) tags.

Do you find it in the output html form like:

<form novalidate="novalidate" method="post" data-validate="true" action="/some_actions" >

If you don't find it, you might want to write your form_for like this:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), {:validate => true}) do |f| %>

Does it help?




回答5:


To use an stable version use 3.0.3 that was the latest stable version supporting rails 3.2.x



来源:https://stackoverflow.com/questions/9310477/client-side-validations-with-devise

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!