はじめに
この記事は、学んだことを復習するために投稿者が理解できる言葉まで落とし込んで書いております。
1.役割
ストロングパラメーターとは、指定したキーを持つ、パラメーターのみ受け取るように制限をかけることができるものです。
2.使用する理由
受け取るパラメーターのデータを制限することで、意図しないデータの保存。更新を避けるため。
今回は、商品出品を行うフリマアプリを想定した例で紹介します。
3.基本構成と使用方法
・基本構成は以下の通りです。
# ・・・中略
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
end
private
def item_params
params.require(:item).permit(:name, :explanation, :category_id, :status_id, :delivery_fee_id, :shipping_region_id, :shipping_day_id, :selling_price, :image).merge(user_id: current_user.id)
end
使用方法
・ストロングパラメーターは、プライベートメゾットとして定義する。
・下記のように、item_paramsとすることで、可読性が向上する。createアクションで保存した後に、データを更新するupdateアクションでも同様の箇所の変更を加えるので、記述をまとめられます!!
def create
@item = Item.new(item_params) ←ここです
end
4.制限する値
4-1.require(モデル名)
# 使用例
params.require(:モデル名)
params.require(:item)
# itemモデルに入っている全てのデータが、保存される。
指定したモデルの中でも、カラム名で保存したい値を制限したいときに、permitを使用する。
4-2.permit(:キー1,キー2...)
# 使用例
params.permit(:キー1, :キー2....)
params.require(:item).permit(:name, :explanation, :category_id, :status_id, :delivery_fee_id, :shipping_region_id, :shipping_day_id, :selling_price, :image)
# 指定したモデルの中でも、保存したい値を制限したいときに、permitでカラム名を制限する。
4-3.merge(:結合させたい外部キー等)
# 使用例:商品を出品したユーザーの情報を紐付けたい場合
params.merge(user_id: current_user.id)
params.require(:item).permit(:name, :explanation, :category_id, :status_id, :delivery_fee_id, :shipping_region_id, :shipping_day_id, :selling_price, :image).merge(user_id: current_user.id)
注意
current_user.idを使用できるのは、deviseを使っているからです。
参考になる記事がありましたので、共有させていただきます。
Rails deviseで使えるようになるヘルパーメソッド一覧
https://qiita.com/tobita0000/items/866de191635e6d74e392
5.最後に
指摘事項などありましたら、勉強のために教えていただけると幸いです。