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

form_forで取得できるparamsについて

More than 1 year has passed since last update.

概要

以前form_forで取得できるparamsでつまづいた経験があったので、投稿します。

form_forでparamsのデータを取得したとき、{"article(#テーブル名)"=>"hoge(#paramsデータ)"}で取得されて「何故?」ってなったときの対処法です。

このとき、binding.pryでparamsを取得してみると以下のようになっているはずです。

paramsの取得結果
[1] pry(#<ArticleController>)> params
=> <ActionController::Parameters {"utf8"=>"✓",
 "authenticity_token"=>"gIvkzIoFCV5rwNBg6uxAl00JImeHW0yMi2esjwvXsjWohISeEXGdYyJv7K41rJVaDz8oJGKNblDcQ/0BxIvFZw==",
"article"=>{"article"=>"aaaa"}, # ここに着目。"article"キーのvalueがハッシュになっています。
"commit"=>"投稿",
"controller"=>"article",
"action"=>"create"}
permitted: false>

form_forでparamsを取得すると、form_tagとは違ってparams[キー]の中にハッシュデータが入ります。
strongParameterでデータが生成されているためにこの形になっているのですが、詳しくは下記をご参考ください。

RailsのStrong Parametersを調べる
https://qiita.com/mochio/items/45b9172a50a6ebb0bee0

解決方法

article_controller.rb
def create
  Article.create(article_params)
end

  def article_params
    params.require(:article).permit(:article).merge(user_id: current_user.id)
  end
# require(:モデル名)をつけることで、入力したデータを取得できる。

何か間違いがありましたらご意見いただけると幸いです。

kotatsu0715
2019年5月よりテックエキスパートで勉強後、AWSエンジニア兼フロント・バックエンドエンジニアとして仕事をしています。 AWS,Docker,React.js,Vue,js,Nuxt.js,PHP,Laravel,TypeScript,HTML,CSS等触ってます。
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