質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3520閲覧

strong parameterにmergeされた要素はホワイトリスト化されるのか

tomoharu

総合スコア107

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/10/11 11:35

編集2020/10/11 11:36

ruby on railsで開発している際に疑問に思ったので質問させていただきます。
railsのstrong parameterではオブジェクトの属性がviewからparamsとして飛んでくることを想定しているとおもいます。
例えば、shopというオブジェクトがあり、placeとnameとpriceというカラムがあるとします。

ruby

1def shop_params 2 params.require(:shop).permit(:name) 3end

とあれば、Shopというオブジェクトはnameというカラム属性を持っていることをコントローラーは想定していると思います。さらに、placeとpriceの情報も渡したいと思いますが、何かしらの事情(例えば外部APIでshopをとってきてその属性名が異なった時など)でplaceやpriceという名前でパラメータをviewから渡せない場合、別名で飛んできたparamsを割り当てるという作業が必要になるかと思います。すなわち、、、

ruby

1def create 2 Shop.new(shop_params.merge( 3 place: params[:shop][:address], 4 price: params[:shop][:budget] 5 )) 6#以下省略 7end

として、割り当てが可能かと思いますが、
この時mergeされたplaceとpriceはstrong parameterでpermitされるのでしょうか?
仮にされないとしたら、このような場合にpermitする方法がなんなのでしょうか?

調べたところ、ホワイトリスト化されるという記事があったのですが、本当かどうかがわからなかったため。。

何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

困ったときは、公式あるいはそれに近い情報源を確認しましょう。

paramsActionController::Parametersという型ですが、そのドキュメントmergeの説明もあります。

単にキーをマージするだけでpermitted?に影響を与える旨は書かれていないため、「すでに別なルートでpermitされていればそのまま、permitされていなくてもそのまま」となるようです。

投稿2020/10/11 12:06

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2020/10/11 13:41

ありがとうございます。ドキュメント見逃してました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問