我正在使用Rails 5和Materialize-Sass,并且从Rails收到默认行为的一些问题,以处理失败的字段验证,如下图所示,这是因为div
在验证失败的输入字段中添加了额外的内容。
使用@Phobetron答案并修改Hugo Demiglio的答案。我对这些代码块进行了一些调整,并且在以下情况下可以正常工作:
- 如果同时
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
我希望它对像我这样具有相同条件的人有用。