Pracuję z Railsami 5 i Materialise-Sass i dostaję pewne problemy z domyślnym zachowaniem Railsów, aby traktować nieudane walidacje pól, jak na obrazku poniżej, a było to z powodu dodatkowych div
dodanych do pól wejściowych, w których walidacja się nie powiodła.
Praca z odpowiedzią @Phobetron i modyfikacja odpowiedzi Hugo Demiglio. Dokonałem pewnych poprawek w tych blokach kodu i coś działa dobrze w następujących przypadkach:
- Jeśli oba
input
i label
mają class
gdziekolwiek swój własny atrybut
<input type="my-field" class="control">
<label class="active" for="...">My field</label>
- Jeśli tagi
input
lub label
nie mają class
atrybutu
<input type="my-field">
<label for="...">My field</label>
- jeśli
label
tag ma w środku inny tag z rozszerzeniemclass attribute
<label for="..."><i class="icon-name"></i>My field</label>
We wszystkich tych przypadkach error
klasa zostanie dodana do istniejących klas w class
atrybucie, jeśli istnieją, lub zostanie utworzona, jeśli nie ma jej w etykiecie lub znacznikach wejściowych .
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('>')
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
pp(html_tag)
end
Mam nadzieję, że będzie to przydatne dla kogoś z takimi samymi schorzeniami jak ja.