2

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

//account.rb

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

//用户.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 更改为 @account

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

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

提交时,我得到了预期的错误 Account(#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

用户[帐户][用户名]

4

2 回答 2

2

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

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

使用一些更好的正则表达式,它将消除字符串中的每一个和[ids]。这是一种解决方案:[new_ids]namejeroenj/client_side_validations

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

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

重要的:

在当前client_side_validations版本中更重要的是,您必须注释掉if(...) { }提到的正则表达式指令。这只是快速修复,if在某些时候可能是必要的,但我还没有找到它的任何用法。

于 2015-04-07T11:36:35.140 回答
1

我们发现这个分支解决了这个问题。

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

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

希望对你有用

于 2014-03-12T19:06:14.847 回答