railsのcreateアクションで、セキュリティー上の関係でフォームから送信したデータを保存する際は、ストロングパラメータを使用するとのことですが、結局なぜrequireとか、permitを使わないといけないのかがいまいち分かりません。
例えば、以下の様なparamsが送られてきたとします。
"utf8"=>"✓", "authenticity_token"=>"xxxxxxxxxxxxxxxxxxx", "text"=>"hello!", "controller"=>"posts", "action"=>"create" }
この時コントローラでは、以下の様な書き方をすると思います。
posts_controller.rb
class PostsController < ApplicationController def create Post.create(post_params) end private def post_params params.permit(:text) end end
params.permit(:text)
によって、{text: "hello!"}
みたいなハッシュが生成されますよね。
ただ、例えばcreateアクションでPost.create(text: params[:text])
のようにそのまま記述したとしても、結局paramsの中のtextというキーのみに対応する値を取得しているので、params.permit(:text)
となにが違うのかが分かりません。
また、requireに関しても、例えば以下の様なparamsが送られてきたとします。
{ "utf8"=>"✓", "authenticity_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxx", "post"=> { "text"=>"hello!", }, "action"=>"create", "controller"=>"posts", }
この時コントローラでは、以下の様な書き方をすると思います。
posts_controller.rb
class PostsController < ApplicationController def create Post.create(post_params) end private def post_params params.require(:post)permit(:text) end end
params.require(:post)permit(:text)
によって、{text: "hello!"}
みたいなハッシュが生成されますよね。
ただ、別にparams[:post].permit(:text)
と書いても、postキーを指定しているので、それ以外のものは弾かれますよね。
結局のところ、セキュリティー上requireとpermitを使うというのは良く聞きますが、具体的にどんな状況だとこれらの恩恵を受けられるのか、教えて頂ければ幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/25 14:59
2016/03/25 16:53