【问题标题】:Client side validations with Devise使用 Devise 进行客户端验证
【发布时间】:2013-09-22 12:42:53
【问题描述】:

我正在尝试将 client_side_validations gem 与 Devise 一起使用来验证设计注册表单。

验证适用于其他一切,但不是 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" %>

【问题讨论】:

    标签: ruby-on-rails devise client-side-validation


    【解决方案1】:

    argc,argv!我使用的是 Rails 3.2.1,最新版本的 gem 与 3.2 不兼容,因此是一场噩梦。使用 3.2.0.beta.2 解决了这些问题。谢谢!

    【讨论】:

      【解决方案2】:

      尝试将 :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" %>
      

      【讨论】:

      • 已经试过了,没有骰子!我正在覆盖我的用户模型中的设计验证,因此条件过滤器案例不适用。
      【解决方案3】:

      换行

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

      【讨论】:

        【解决方案4】:

        我还没有广泛使用 client_side_validations gem。但是从外观上看,它需要在表单(和表单元素)标签中具有 data-validate="true" 。

        你是否在输出的 html 表单中找到它,例如:

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

        如果你没有找到它,你可能想这样写你的 form_for:

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

        有帮助吗?

        【讨论】:

        • 根据gem的使用情况,需要这些js文件 是不是也在html页面上?
        • 是的,显然所有这些都已到位,这就是它呈现现在的方式的原因。
        【解决方案5】:

        要使用稳定版本,请使用 3.0.3,它是支持 rails 3.2.x 的最新稳定版本

        【讨论】:

          猜你喜欢
          • 2015-02-04
          • 2020-12-26
          • 2012-12-06
          • 1970-01-01
          • 1970-01-01
          • 2012-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多