Я работаю с Rails 5 и Materialize-Sass, и у меня возникают некоторые проблемы с поведением Rails по умолчанию для обработки неудачных проверок полей, как на изображении ниже, и это было из-за дополнительных div
добавленных в поля ввода полей, где проверка не удалась.
Работа с ответом @Phobetron и изменение ответа Хьюго Демильо. Я внес некоторые изменения в эти блоки кода, и у меня что-то работает хорошо в следующих случаях:
- Если у обоих
input
и label
есть собственный class
атрибут где угодно
<input type="my-field" class="control">
<label class="active" for="...">My field</label>
- Если теги
input
или label
не имеют class
атрибута
<input type="my-field">
<label for="...">My field</label>
- если
label
внутри тега есть другой тег сclass attribute
<label for="..."><i class="icon-name"></i>My field</label>
Во всех этих случаях error
класс будет добавлен к существующим классам в class
атрибуте, если они существуют, или он будет создан, если его нет в метке или тегах ввода .
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
class_attr_index = html_tag.index('class="')
first_tag_end_index = html_tag.index('>')
# Just to inspect variables in the console
puts '😎 ' * 50
pp(html_tag)
pp(class_attr_index)
pp(first_tag_end_index)
if class_attr_index.nil? || class_attr_index > first_tag_end_index
html_tag.insert(first_tag_end_index, ' class="error"')
else
html_tag.insert(class_attr_index + 7, 'error ')
end
# Just to see resulting tag in the console
pp(html_tag)
end
Я надеюсь, что это может быть полезно для кого-то с такими же условиями, как я.