ошибка (div class = "fieldWithErrors") обходной путь? - PullRequest
3 голосов
/ 22 декабря 2009

В моем проекте есть форма регистрации.

Мой HTML выглядит как

    <form method="post" action="/users">
<div style="margin: 0pt; padding: 0pt;">
<input type="hidden" value="lDHrKRC2ENhRKcaoBR4XGfzri/MY09PjqVDvHRtC0D4=" name="authenticity_token"/>
</div>    
<p><label for="login">Login</label>
        <input type="text" size="30" name="user[login]" id="user_login"/></p>

        <p><label for="email">Email</label>
        <input type="text" size="30" name="user[email]" id="user_email"/></p>

        <p><label for="password">Password</label>
        <input type="password" size="30" name="user[password]" id="user_password"/></p>

        <p><label for="password_confirmation">Confirm Password</label>
        <input type="password" size="30" name="user[password_confirmation]" id="user_password_confirmation"/></p>

        <p><input type="submit" value="Sign up" name="commit"/></p>
      </form>

Теперь генерируем ошибку, отправляя пустую форму, мой код выглядит так:

    <form method="post" action="/users">
<div style="margin: 0pt; padding: 0pt;"><input type="hidden" value="lDHrKRC2ENhRKcaoBR4XGfzri/MY09PjqVDvHRtC0D4=" name="authenticity_token"/>
</div>    
<p><label for="login">Login</label>
        </p><div class="fieldWithErrors"><input type="text" value="hg" size="30" name="user[login]" id="user_login"/></div>

        <p><label for="email">Email</label>
        </p><div class="fieldWithErrors"><input type="text" value="gh" size="30" name="user[email]" id="user_email"/></div>

        <p><label for="password">Password</label>
        </p><div class="fieldWithErrors"><input type="password" value="gh" size="30" name="user[password]" id="user_password"/></div>

        <p><label for="password_confirmation">Confirm Password</label>
        <input type="password" value="gh" size="30" name="user[password_confirmation]" id="user_password_confirmation"/></p>

        <p><input type="submit" value="Sign up" name="commit"/></p>
      </form>

это разрушит мою раскладку. Есть ли решение, которое делает

<input type="text" value="gh" size="30" name="user[email]" class="fieldWithErrors" id="user_email"/>

вместо

<div class="fieldWithErrors"><input type="text" value="gh" size="30" name="user[email]" id="user_email"/></div>

Ответы [ 4 ]

7 голосов
/ 22 декабря 2009

Создайте новый инициализатор, например, / config / initializers / field_error.rb :

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
  if html_tag =~ /<(input|textarea|select)[^>]+class=/
    class_attribute = html_tag =~ /class=['"]/
    html_tag.insert(class_attribute + 7, "fieldWithErrors ")
  elsif html_tag =~ /<(input|textarea|select)/
    first_whitespace = html_tag =~ /\s/
    html_tag[first_whitespace] = " class='fieldWithErrors' "
  end
  html_tag  
end
1 голос
/ 18 мая 2011

Railscast - это путь, но вам нужно обновить его для Rails 3.x.

добавьте это в конец вашей environment.rb

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
  "<span class='field_error'>#{html_tag}</span>".html_safe
end

Откажитесь от приложения рельсы, и вы будете настроены.

1 голос
/ 22 декабря 2009

Может быть, вам стоит подумать об использовании formtastic http://github.com/justinfrench/formtastic.

1 голос
/ 22 декабря 2009

Это ошибка в том, как Rails показывает ошибки формы. Это старая и известная проблема с Rails: https://rails.lighthouseapp.com/projects/8994/tickets/1626-fieldwitherrors-shouldnt-use-a-div

Почему это до сих пор не решено, для меня загадка. Я думаю, это одна из тех мелочей, которые вам нужно переопределить вручную в Rails. Обязательно попробуйте обходной путь Джона Топли. Или исправьте это в своем локальном коде Rails и отправьте это как исправление в Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...