Ruby on rails 嵌套字段上的客户端验证未生成有效性
我有应用程序rails,使用客户端验证gem和design来验证design注册表单 //account.rbRuby on rails 嵌套字段上的客户端验证未生成有效性,ruby-on-rails,ruby-on-rails-3,devise,client-side-validation,Ruby On Rails,Ruby On Rails 3,Devise,Client Side Validation,我有应用程序rails,使用客户端验证gem和design来验证design注册表单 //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, :ur
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 %>
注册路径(资源名称),:validate=>true)do | f |%>
真do |内部|形式|%>
验证可以很好地处理电子邮件字段,但用户名无效。。
帮帮我,谢谢
更新--validate show,但这不是嵌套表单
更改:account为@account
<%= f.fields_for :account, :validate => true do |inner_form|%>
true do|内部|u形式|%>
到
true do|内部|u形式|%>
提交时,我得到了错误
应为帐户(#27129348),已获得ActiveSupport::HashWithInferenceAccess(#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">
发行
用户\帐户\属性\用户名
用户[帐户属性][用户名]
工作
用户\帐户\用户名
用户[帐户][用户名]我们找到了解决该问题的分支机构 我刚刚用以下行更新了我的文件:
gem 'client_side_validations', github: "jeroenj/client_side_validations", :branch => "4-0-deeply-nested-forms"
希望您能为当前的
DavyJonesLocker/client\u-side\u验证版本(Rails 4.2)工作,修复嵌套表单只是在替换行(在Rails.validations.js
或中放置的validateForm
函数中):
使用一些更好的regexp,它将从name
字符串中删除所有[id]
和[new\u id]
。以下是在jeroenj/client\u side\u validations
上介绍的一个解决方案:
name = name.replace(/\[((?:new_)?\d+|[0-9a-f]{24})\]/g, "[]");
这很好(只要你有健全的属性名称),但可能有一些更好的方法来做到这一点。如果有人擅长编写JS正则表达式,请帮助改进它。我会尝试尽快完成当前的项目,但我肯定不是一个regexp硕士
重要:
更重要的是,在当前的客户端验证
版本中,您必须注释掉围绕上述regexp指令的if(…){}
。这只是快速修复,如果在某个时候可能需要,但我还没有找到它的任何用法。什么不起作用?验证未强制执行,或错误消息未显示?我认为您的主要问题是设置
的方式,请告诉我这是否解决了问题。@Andrew no show错误消息,但验证未生成..@user532339未工作,同一问题
name = name.replace(/\[[\da-z_]+\]\[(\w+)\]$/g, "[][$1]");
name = name.replace(/\[((?:new_)?\d+|[0-9a-f]{24})\]/g, "[]");