私は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
私と同じ条件の人に役立つと思います。