嵌套字段上的客户端验证不生成验证

时间:2012-11-11 07:01:35

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

我有应用程序轨道并使用带有Devise的client_side_validations gem来验证设计注册表格

// account.rb

has_one :user
validates :username, presence: true, uniqueness: true

// user.rb

 belongs_to :account
 validates :email, presence: true, uniqueness: true

// new.html.erb

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

   <%= f.fields_for :account, :validate => true do |inner_form|%>
      <div  class="field">
          <%= inner_form.label :username, "Username" %><br />
          <%= inner_form.text_field :username %>
      </div>
   <% end %>

   <div class="field">
       <%= f.label :email, "Email" %>
       <%= f.email_field :email %>
   </div>
   <div>
       <%= f.submit "Sign up" %>
   </div>

<% end %>

验证可以正常使用电子邮件字段,但用户名不起作用.. 帮帮我,,,谢谢

更新 ---验证展示,但这不是嵌套表格

更改:帐户为@account

<%= f.fields_for :account, :validate => true do |inner_form|%>

<%= f.fields_for @account, :validate => true do |inner_form|%>

提交时我收到错误 账户(#27129348)预计,获得ActiveSupport :: HashWithIndifferentAccess(#26695068)

当验证无效时,html代码

<input id="user_account_attributes_username" name="user[account_attributes][username]" size="30" type="text" data-validate="true">

验证工作

<input id="user_account_username" name="user[account][username]" size="30" type="text" data-validate="true">

问题

user_account_attributes_username

用户[account_attributes] [用户名]

工作

user_account_username

用户[帐户] [用户名]

2 个答案:

答案 0 :(得分:2)

对于当前DavyJonesLocker/client_side_validations版本(Rails 4.2),修复嵌套表单只是替换行(位于rails.validations.js函数内的.coffeevalidateForm):

name = name.replace(/\[[\da-z_]+\]\[(\w+)\]$/g, "[][$1]");

使用更好的正则表达式,这将消除[ids]字符串中的每个[new_ids]name。以下是jeroenj/client_side_validations上提出的一个解决方案:

name = name.replace(/\[((?:new_)?\d+|[0-9a-f]{24})\]/g, "[]");

这很好(只要你有合理的属性名称),但可能有更好的方法来做到这一点。如果有人擅长编写JS regexp,请帮助改进它。我会在完成当前项目后立即尝试,但我绝对不是正则表达式。

重要:

在当前的client_side_validations版本中,您必须注释掉if(...) { }并提及所提到的regexp指令。这只是quickfix,if可能在某些时候是必要的,但我还没有找到任何用法。

答案 1 :(得分:1)

我们找到了解决这个问题的分支。

我刚用这一行更新了我的Gemfile:

gem 'client_side_validations', github: "jeroenj/client_side_validations", :branch => "4-0-deeply-nested-forms"

希望能为你效劳