simple_formでwrapperを使ってみる

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内にヒントとエラーメッセージが展開されるようです。これで前に進める!


カテゴリー Ruby, Ruby on Rails | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です