簡體   English   中英

嵌套字段的客戶端驗證不生成驗證

[英]Client Side Validations on Nested Field Not Generate Valiadtion

我有應用程序 rails 並使用 client_side_validations gem 和 Devise 來驗證設備注冊表單

//帳戶.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 %>

驗證在電子郵件字段中工作正常,但用戶名無效.. 幫幫我,謝謝

UPDATE ---validate show 但這不是嵌套形式

將 :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

用戶[帳戶屬性][用戶名]

工作過

user_account_username

用戶[帳戶][用戶名]

對於當前的DavyJonesLocker/client_side_validations版本(Rails 4.2)修復嵌套表單只是替換行(在rails.validations.js.coffee放置在validateForm函數中):

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

使用一些更好的正則表達式,它將消除name字符串中的每個[ids][new_ids] 這是jeroenj/client_side_validations上提出的一種解決方案:

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

這很好(只要你有合理的屬性名稱)但可能有一些更好的方法來做到這一點。 如果有人擅長編寫 JS 正則表達式,請幫助改進它。 我會在完成當前項目后立即嘗試,但我絕對不是正則表達式大師。

重要的:

在當前的client_side_validations版本中,您必須注釋掉圍繞提到的正則表達式指令的if(...) { } 這只是快速修復, if在某些時候可能有必要,但我還沒有找到任何用法。

我們發現這個分支解決了這個問題。

我剛剛用這一行更新了我的 Gemfile:

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

希望對你有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM