Estou trabalhando com o Rails 5 e o Materialize-Sass e estou tendo alguns problemas com o comportamento padrão do Rails para tratar validações de campo com falha, como na imagem abaixo, e foi por causa do acréscimo div
adicionado aos campos de entrada em que a validação falhou.
Trabalhando com a resposta @Phobetron e modificando a resposta de Hugo Demiglio também. Fiz alguns ajustes nesses blocos de código e recebo algo funcionando bem nos seguintes casos:
- Se ambos
input
e label
tiver seu próprio class
atributo em qualquer lugar
<input type="my-field" class="control">
<label class="active" for="...">My field</label>
- Se as tags
input
ou label
não tiverem um class
atributo
<input type="my-field">
<label for="...">My field</label>
- se a
label
tag tiver outra tag dentro com oclass attribute
<label for="..."><i class="icon-name"></i>My field</label>
Em todos esses casos, a error
classe será adicionada às classes existentes no class
atributo, se existir, ou será criada se não estiver presente no rótulo ou nas tags de entrada .
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
Espero que possa ser útil para alguém com as mesmas condições que eu.