2

アプリケーションレールがあり、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 を @account に変更

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

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

送信すると、Account(#27129348) expected, got 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

ユーザー[アカウント][ユーザー名]

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]のおよびを排除する、いくつかのより良い正規表現を使用します。で提示された 1 つのソリューションを次に示します。[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 に答える