概要
以前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(:モデル名)をつけることで、入力したデータを取得できる。
何か間違いがありましたらご意見いただけると幸いです。