Проверка на стороне клиента с Devise - PullRequest
2 голосов
/ 16 февраля 2012

Я пытаюсь использовать гем client_side_validations с Devise для проверки формы регистрации устройства.

Проверки работают хорошо со всем остальным, но не сгенерированной формой.

Я добавил соответствующее: validate => true, но проверки работают только тогда, когда я нажимаю «Отправить», а не на вкладке, как в любой другой форме.

<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" %>

Ответы [ 5 ]

4 голосов
/ 16 февраля 2012

Argc, argv! Я использую Rails 3.2.1, последняя версия гема несовместима с 3.2, поэтому это кошмар. Использование 3.2.0.beta.2 устраняет проблемы. Спасибо!

3 голосов
/ 16 февраля 2012

Попробуйте поставить: validates => true на ваши поля напрямую, например:

<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" %>
2 голосов
/ 11 ноября 2012

изменить строку

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

на

<%= form_for(@user, :url => registration_path(resource_name), :validate => true) do |f| %>
1 голос
/ 16 февраля 2012

Я еще широко не использовал гем client_side_validations. Но, судя по всему, он должен иметь тег data-validate = "true" в тегах формы (и элементов формы).

Вы найдете его в выходной HTML-форме, например:

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

Если вы его не найдете, вы можете написать свою форму следующим образом:

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

Помогает ли это?

0 голосов
/ 22 сентября 2013

Чтобы использовать стабильную версию, используйте 3.0.3, которая была последней стабильной версией, поддерживающей rails 3.2.x

...