Как изменить мою пользовательскую ошибку 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"> #{errors}</span>).html_safe
end
Затем сам HTML вместе с ошибкой HTML:
<p>
<label for="category_name">Category Name *</label><span class="validation-error"> can't be blank</span>
<br>
<input id="category_name" name="category[name]" size="30" type="text" value=""><span class="validation-error"> can't be blank</span>
</p>
Мне нужна только ошибка. сообщение рядом с label, а не с правой стороны input. Как бы я это сделал? Формат для меня сложен, когда я смотрю на него.
Спасибо.
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"> can't be blank</span>Правка:
Хорошо, похоже, что и метка, и входные данные должны быть обернуты пользовательской ошибкой. Вот несколько ссылок:
Comments