simple_formとbootstrapの組み合わせは最強だと思うんですが、事情によりbootstrapが使えない場合もあります。
そうなってくると、simple_formの見せ場が難しくなり、form_forでやる?みたいになりそうですが、それはもう私みたいにsimple_formとbootstrapに慣れた人には辛過ぎます。
simple_formは出力をカスタマイズするためのwrapperがありますから、これを使ってみましょう。
今回は、フォームをtableで定義するという方法を使います。
参考ページ:simple_form をTable 要素で使う
このページに倣って書いてみたのですが、これだとエラーメッセージがそれぞれの項目毎に出てくれませんでした。それは非常に困る。config.wrappersの書き方の参考になるものはないか?と思ってググっていたのですが、あまり見つからず。そう思っていたところに、bootstrapのconfig.wrappersを見ればいいんじゃないか?と思って確認したところ、これがビンゴ!すごいわかりやすいです。
SimpleForm.setup do |config|
// ...省略
// 最後に追記する
config.wrappers :table, tag: :tr, class: :input, hint_class: :field_with_hint,
error_class: :field_with_errors do |b|
b.use :html5
b.use :placeholder
b.optional :maxlength
b.optional :pattern
b.optional :min_max
b.optional :readonly
b.use :label, wrap_with: {tag: 'td'}
b.wrapper tag: 'td' do |ba|
ba.use :input
ba.use :hint, wrap_with: {tag: :span, class: :hint}
ba.use :error, wrap_with: {tag: :span, class: :error}
end
end
end
inputをwrapperのtdで括って、その中にhint, errorを持たせるようにすると、同一td内にヒントとエラーメッセージが展開されるようです。これで前に進める!
