はじめに
form_withを使用中に気になったので調べてまとめてみました。
目次
urlの指定
urlの書き方
form_with url: url_path
例)
<%= f.text_field :emai%>
<%= f.submit %>
urlでは指定したurlに対してPOSTメソッドを行う。
:scope
scope
指定すると「指定すると現在のURLに対応したメソッドにフォームを送信」してくれる
つまり、loinフォームを作成していてsessionController
を使っている場合はsessionController
のnewメソッドに送信してくれることになる
ストロングパラメーターの設定
params.permit(:email)
urlの場合は構造階層を意識することなくストロングパラメーターを設定できる。
modeleの指定
modelの書き方
form_with model: @model
新しく作られたオブジェクトの場合
例) user = User.new
controller間の処理の流れ
new => create
この場合は渡されたオブジェクトの値が空の場合Rallsが自動でcreateメソッドを呼び出してくれる。
ストロングパラメーターの値指定
urlを指定して値を渡した場合は直接値を指定しできたが
moelの場合は構造階層になるので指定方法が変わる
「Userモデルのemailを指定する」といった形に切り替える
params.requitre(:user).permit(:email)
となり、params[:user][:email]
という構造階層での指定が必要になる。
modelとurlの指定の違い
- modelは中身が入っていると自動でeditメソッドを呼び出す
- ストロングパラメーターの指定方法が違う
まとめ
個人的両方の使いどころ
ログインフォームはurl指定
登録フォームはmodel指定