form_for ヘルパーから form_with ヘルパーへの変更
Rails 5.1 で追加された form_with
というヘルパーがあります。
従来の、form_for
form_tag
に換わる新機能です。
form_for
form_tag
は将来廃止されるらしいので今のうちに備えておきましょう。
form_for
の場合は、以下の書き方で大抵置き換えできます。
before:
<%= form_for(@user, url: user_path, html: {}) do |f| %>
after:
<%= form_with(model: @user, url: user_path, local: true, html: {}) do |f| %>
- ActiveRecord オブジェクトの指定がハッシュ形式(
model: @user
)になっています。 - 非同期通信ではないタグを書き出す
local: true
をつける。
これだけで済むので(おそらく)ぜひ書き換えてみましょう。
このようにお手軽な form_with
ですが、移行の際にハマりポイントもあるので紹介しておきます。
id、class 属性の指定位置が変わっている & (バージョンによっては)デフォルトで出してくれない
id
class
属性が、htmlオプション中での指定だったものが、外に出されました。
また、Railsのバージョンによってはデフォルトの id
属性がつかなくなりました。
RspecやJSでセレクタでの参照をしている場合は要注意です。
非同期通信がデフォルトになっている
local: true
を忘れると小一時間悩みます。
エラーは出ないけど、画面遷移しないときは忘れていることが多いです。
以上簡単な紹介でした。
Have a nice rail!