1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

form_forをform_withにリファクタする

Last updated at Posted at 2018-12-21

はじめに

Railsの5.1以降はform_withが推奨されform_forform_tagに別れていたのがform_withに統合されます。自社サービスファform_forのままだったのでform_withにリファクタする課程で調べたノウハウを記載していきます。
まだ着手したばかりなので、追記していくかもしれません。

やったこと

元々の実装

form_for @model, url: action_path do |f|

form_withに変更

form_with model: @model, url: action_path, local: false do |f|
  • 第一引数に指定していたオブジェクトをmodelオプションに設定
  • デフォルトが非同期通信になったため、localオプションにfalseを設定

非同期通信を多用しているサービスなら、デフォルトがlocal: trueで良いと思いますが、参画しているサービスはあまりなかったため、デフォルトをfalseにしたいということで、以下をconfig/environment/*.rbに設定しました。

config.action_view.form_with_generates_remote_forms = false

configレベルでの設定になるんですね。

ここでcheckboxlabelと紐づいてないことに気づきました。label for=""のことです。

config.action_view.form_with_generates_ids = true

1個ずつidを割り振ると対応が大変なのですが、configに常軌を設定すると自動でidの発行・紐づけをしてくれます。

最後に

リファクタを進めてわかった点は追記していこうと思います。
config周りはトラップな印象を受けました。廃止された時、リファクタ対応をしておかなければ対応が大変だったと思いました。先に着手しておいてよかったです。

1
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?