使用ClientSideValidations gem进行验证

时间:2016-10-25 02:36:33

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

我正在尝试使用gem ClientSideValidations验证我的表单,并使用presence true,但我也尝试使用唯一性进行验证但是在表单被加入并且只显示一次消息之前它不起作用。我在aplicatios.js中添加了// = require rails.validations并安装了gem 这是我的表格:

   <%= form_for(@category, validate: true) do |f| %>
  <% if @category.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>

      <ul>
      <% @category.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name  %>

  </div>
  <div class="field">
    <%= f.label :color %><br>
    <%= f.color_field :color %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

和我的模特:

class Category < ActiveRecord::Base
    has_many :has_categories
    has_many :articles, through: :has_categories
    validates :name, presence: true, uniqueness: true 

end

1 个答案:

答案 0 :(得分:1)

引用原始github doc: Wrapper对象和远程验证
这是有道理的。我之前没有使用过这个,但IMO你不能仅仅在客户端验证唯一性,需要使用AJAX来比较你传递给相应模型的数据。你的后端。您可以通过在表单中​​设置remote: true来实现此目的,这将成为一个AJAX请求。

更新 - 经过一段时间的努力,我终于遇到了这个问题here。它声明默认情况下禁用唯一性以阻止Brute force attack。因此,您需要使用AJAX自行实现此验证 如果对您有任何意义,您也可以查看this。我也无法让它发挥作用。