スポンサーリンク

【Ruby on Rails】devise viewファイルのform_withの記述

みなさんこんにちは!
のむ(@nomu_engineer)です!

今回の記事では、deviseを使ったユーザー管理機能の実装を行う上で、必要になってくるviewファイルに記述する、form_withの書き方についてまとめました。

form_forは非推奨の記述となっており、form_withの記述の仕方が推奨されていますので、form_withの記述の仕方をメインに紹介しています。

この記事を読むことのメリット
・form_withの記述の仕方が理解できる。

この記事を読むおすすめの読者
・formの記述の仕方を知らない方。
・プログラマイング初心者
・駆け出しエンジニア

それでは早速まとめていきたいと思います!

form_forによる記述

まずは非推奨となったform_forの記述の仕方から見ていきましょう!
それがこちらです。

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do

すでに非推奨となっていますので細かな説明は省いていきたいと思います。

form_withによる記述

それでは次に、form_withに置き換えた記述をしてみます。
それがこちらです。

<%= form_with model: @user, local: true do |f| %>

この様にして置き換えることができます。
とてもシンプルな記述になりますね!

form_withのオプションについて

それでは、次にform_withオプションの詳細の説明をしていきたいと思います。

local: true

こちらはちらほら見たことがある人も多いと思いますが、意味を知らないという方もいるかなと思い、説明させて頂きます。

local: trueオプションは自動で行われる非同期通信である、Ajaxを無効にすることができるオプションです。

このオプションがることによって、formの中にdata-remote=”true”という記述がされることを防いでくれます。

このオプションがないとJavaScriptによってレンダリングし、リダイレクト処理が行われないため、画面遷移しなくなってしまいます。

form_forの場合はデフォルトでAjaxを使うことがなかったので、この記述は必要ありませんでしたが、form_withではこの記述は必要になってきます。

なので忘れずにこの記述していきましょう!

idとclassについて

こちらは、クラスとidを付与するための記述です。
元々は自動で付与してくれなかったので、自分で付与しなければいけなかったのですが、Rails5.2から自動付与される様になったので、それ以降のバージョンを使っている人は自分で付与する必要はありません。

model: @userについて

ここにはモデルを指定します。
モデル名によって@以降の文字は変わってきますが、今回はUserモデルの実装を考え、@userを指定してます。
※@user = User.new

:modelオプションは生成するフォームがどのモデルに基づいて作られるかを示すオプションです。
ここで指定したモデルから推測された送信先へ送信するフォームが作成されます。

つまるところどういうことかというと、送信先のURLの指定もここで行われているということです。

この「model: @user」の部分はform_forの例えると、「resource」の部分になります。

最後に

以上がform_forをform_withに置き換えた記述になります。

form_withはモデルに基づかない記述の仕方もできます。
model: @userのところを:modelオプションを使わずに、:urlオプションを指定して送信先を指定するやり方です。

それはまた別の記事で詳しく紹介できたらなと思います。

最後のまとめ
・form_forの記述は非推奨の記述となっており、form_withを用いた記述が推奨されているということ。
・form_withの記述には:modelオプションによる送信先の推測と:localオプションによる、Ajax通信を無効にする記述が必要になるということ。

ここは必ず知っておきたいところなので、是非抑えておきましょう!

ありがとうございました!

スポンサーリンク




この記事を書いた人