LoginSignup
2
1

More than 5 years have passed since last update.

[Rails]form_withでモデルを送るメリット(form_forのメリット)

Posted at

form_withでモデルを記載した時、つまりform_forで書いた時のメリットがイマイチ分からなかったので、簡単にまとめてみました。

モデルの存在有無で自動的にcreateかupdateに振り分けてくれる

form_with model:@userとした時に@userが既に存在していればusersコントローラのupdateに、存在していなければcreateアクションに指定せずとも勝手にとんでいきます。
もし特定のアクションにとばしたい場合はurlを指定してください。

paramsがモデルに紐づいた形式になる

アクションが受け取るparamsがparams[:user][:email]とかparams[:user][:name]などになるので、ユーザー情報を更新したい時などは一々全部書かなくてもparams[:user]だけで全部Getできる。

sample.rb
# form_with url:user/create(form_tag)で取得した場合
def create
 user = User.new(name: params[:name], email: params[:email])
 user.save
end

# form_with model:@user (form_for)で取得した場合
def create
 user = User.new(params[:user])
 user.save
end

ただ、上記はストロングパラメータをガン無視していますので、実際には上記のような使い方はできません。

おまけ

ストロングパラメータを使うと下記の様になります。

sample.rb
# form_with url:user/create(form_tag)で取得した場合
def create
 user = User.new(user_params)
 user.save
end

private
 def user_params
   params.permit(:name, :email)
 end


# form_with model:@user (form_for)で取得した場合
def create
 user = User.new(user_params)
 user.save
end

private
 def user_params
   params.require(:user).permit(:name, :email)
 end

なんか記述量が増えてしまった。。。

ただ、HTML側の記述量はcreateとupdateで場合わけしない分減るので、全体としてはコード量は減るんですかね。他のメリットデメリットを知っている方いたら教えていただけると幸いです。

2
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
2
1