Как изменить мою пользовательскую ошибку html от рендеринга себя дважды?



Когда я пытаюсь создать Категорию с помощью Ajax, я получаю странное поведение с моим сообщением об ошибке.



Прямо сейчас мое сообщение об ошибке выглядит следующим образом:



Введите описание изображения здесь



Мое творение.JS.Эрб и новый.JS.erb оба имеют один и тот же код, который является просто этой строкой:



$(".cc-form").html("<%= escape_javascript(render(:partial => 'categories/form', locals: { category: @category })) %>");


Это моя форма категории:



<%= form_for(@category, :remote => true, :html => { :class => "add-form", :id => "cform" }) do |f| %>
<fieldset>
<p>
<%= f.label :name, "Category Name *" %>
<br />
<%= f.text_field :name %>
</p>
<div class="form-actions">
<%= f.submit "Create" %>
</div>
</fieldset>


Вот код для включения пользовательского HTML-кода ошибок:



# application.rb

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
errors = Array(instance.error_message).join(',')
%(#{html_tag}<span class="validation-error">&nbsp;#{errors}</span>).html_safe
end


Затем сам HTML вместе с ошибкой HTML:



<p>
<label for="category_name">Category Name *</label><span class="validation-error">&nbsp;can't be blank</span>
<br>
<input id="category_name" name="category[name]" size="30" type="text" value=""><span class="validation-error">&nbsp;can't be blank</span>
</p>


Мне нужна только ошибка. сообщение рядом с label, а не с правой стороны input. Как бы я это сделал? Формат для меня сложен, когда я смотрю на него.



Спасибо.

567   2  

2 ответов:

Я думаю, вы используете field_error_proc плохо, потому что хорошо обернуть поле ввода в элемент со специальным классом. Field_error_proc помечает как метку, так и входной тег с помощью field_with_error по умолчанию, поскольку ссылающийся объект (:name, что означает category.name, имеющий массив ошибок) является одним и тем же. Это не дефект, потому что это хорошо для изменения цвета вашей этикетки на красный в этом случае. Я проверил код Rails (actionpack/lib/action_view/helpers/tags/label.rb), и вы не можете отключить это поведение для меток (это может быть запрос функции), поэтому я думаю, что есть только один решение для вашей проблемы, если вы используете простой html для меток.

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

  • Вместо

    <%= f.label :name, "Category Name *" %>

    Использовать

    <label for="category_name">Category Name *</label>

    На ваш взгляд.

  • Это не слишком приятно, но вы можете использовать f.label, Если вы сделаете form .label .validation-error { display: none } в вашем файле таблицы стилей. Я знаю, что это просто обходной путь, но если f.label необходим, то я не знаю лучшего решения.

У вас есть два из этих тегов <span> на странице:

<span class="validation-error">&nbsp;can't be blank</span>

Правка:

Хорошо, похоже, что и метка, и входные данные должны быть обернуты пользовательской ошибкой. Вот несколько ссылок:

Http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t

Https://gist.github.com/1464315

Comments

    Ничего не найдено.