Проверка на стороне клиента для вложенного поля не создает проверку

У меня есть рельсы приложения и я использую гем client_side_validations с Devise для проверки формы регистрации разработки.

//account.rb

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

//user.rb

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

//новый.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 %>

Проверка работает нормально с полем электронной почты, но для имени пользователя не работает ... помогите мне, спасибо

ОБНОВЛЕНИЕ --- проверить показ, но это не вложенная форма

изменить :аккаунт на @аккаунт

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

to

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

при отправке я получаю ожидаемую ошибку Account (# 27129348), получил ActiveSupport:: HashWithIn DifferentAccess (# 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

пользователь [учетная запись] [имя пользователя]


person GeekToL    schedule 11.11.2012    source источник
comment
Что не сработало? Проверка не выполняется или сообщения об ошибках не отображаются?   -  person Andrew    schedule 12.11.2012
comment
Я думаю, что ваша главная проблема заключается в том, как вы настроили свой <%= f.fields_for :account. Я уверен, что вы должны изложить его следующим образом <%= fields_for @account, :validate => true do |inner_form|%> дайте мне знать, если это решит проблему.   -  person    schedule 12.11.2012
comment
@ Эндрю не показывает сообщение об ошибке, но проверка не генерируется ..   -  person GeekToL    schedule 13.11.2012
comment
@user532339 не работает, та же проблема github.com/bcardarella/client_side_validations/issues/423   -  person GeekToL    schedule 13.11.2012


Ответы (2)


Для текущей версии DavyJonesLocker/client_side_validations (Rails 4.2) исправление вложенных форм — это просто замена строки (в rails.validations.js или .coffee, помещенных внутри функции validateForm):

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, пожалуйста, помогите его улучшить. Я попробую, как только закончу текущий проект, но я определенно не мастер регулярных выражений.

ВАЖНЫЙ:

Более того, в текущей версии client_side_validations вы должны закомментировать if(...) { }, который окружает упомянутую инструкцию регулярного выражения. Это просто быстрое исправление, if возможно понадобится в какой-то момент, но я пока не нашел для него применения.

person jmarceli    schedule 07.04.2015

Мы нашли эту ветку, которая решила эту проблему.

Я только что обновил свой Gemfile этой строкой:

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

Надеюсь, это сработает для вас

person jaime gonzalez    schedule 12.03.2014