LoginSignup
1
3

More than 5 years have passed since last update.

Rails5.1でform_withを利用した時にtext_fieldなどでid属性を自動生成してもらう方法

Posted at

事の発端

Rails5.1から使えるform_withを使うと、f.text_fieldなどに今まで自動生成されていたid属性が生成されなくなる。
通常であればid属性が生成されなくても困らないかもしれないけど、f.labelと併用しているときにlabelのfor属性は自動生成されるが、それに対応するinputのid属性が生成されないので少し困った。

解決方法

自分でid属性を指定してもいいが、ちょっと長くて面倒なので自動で生成されるようにできないかを調べてみた。
するとtext_fieldなどにはskip_default_idsオプションがあり、skip_default_ids: falseと指定するとこれまで通りid属性が自動生成されるようになった。
(下記のようにf.label doでネストする方法もあるみたいだけど、今回はデザインの都合上この対応が取れなかったので。
https://github.com/rails/rails/issues/25197#issuecomment-231830219)

ただ、1つ1つに毎回skip_default_idsを指定するのは面倒なので、form_withにオプションで指定できるのではないかと思って調べてみたが、form_with内でskip_default_idsをtrueに指定するのがハードコードされていたのでRails5.1では1つ1つ指定するしかなさそう。。
https://github.com/rails/rails/blob/v5.1.4/actionview/lib/action_view/helpers/form_helper.rb#L745

補足

これはどうやらRails5.2になるとform_with_generates_remote_formsみたいに一括設定できるようになるっぽい。
https://github.com/rails/rails/commit/21cd5b3031b0c022439a88cb750c1e00cd07f1e3

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3