2
3

More than 3 years have passed since last update.

【ruby】ストロングパラメーター【require】【permit】【merge】使用方法 役割

Last updated at Posted at 2020-09-25

はじめに

 この記事は、学んだことを復習するために投稿者が理解できる言葉まで落とし込んで書いております。

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.最後に

指摘事項などありましたら、勉強のために教えていただけると幸いです。

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