Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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で場合わけしない分減るので、全体としてはコード量は減るんですかね。他のメリットデメリットを知っている方いたら教えていただけると幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away