📋

Params & Strong Parameters

リクエストパラメータアクセスと許可リスト管理

RailsのparamsはURLパラメータ、クエリ文字列、フォームデータ、JSONボディなどを一つのハッシュで統合アクセスできます。

paramsソース:

  • URLセグメント: /posts/:idparams[:id]

  • クエリ文字列: ?page=2params[:page]

  • フォームデータ: <input name="post[title]">params[:post][:title]

  • JSON Body: {"post": {"title": "..."}}params[:post][:title]

Strong ParametersはRails 4で導入されたセキュリティ機能です。Mass Assignment攻撃(ユーザーがadmin=trueなどのフィールドをこっそり送信する)を防止します。

def post_params
  params.require(:post).permit(:title, :content, :category_id)
end

requireで必須パラメータキーを確認し、permitで許可フィールドだけホワイトリストに追加します。許可されないフィールドは自動的に無視されます。

キーポイント

1

paramsハッシュでURL、クエリ文字列、フォームデータにアクセス

2

params[:id] — URLセグメントから値を抽出

3

params.require(:post) — 必須パラメータキー検証(なければ400エラー)

4

.permit(:title, :content) — 許可フィールドをホワイトリストに追加

5

許可されないフィールド(例: admin、role)は自動除去

6

Model.create(post_params)またはModel.update(post_params)で安全に使用

メリット

  • Mass Assignment攻撃を根本的に遮断
  • 許可フィールドがコードに明示的
  • コントローラごとに異なる許可フィールド設定可能
  • ネストパラメータもサポート

デメリット

  • 新フィールド追加時permitへの追加を忘れやすい
  • ネスト構造が複雑だとpermitコードが長くなる
  • 配列/ハッシュパラメータpermit構文が直感的でない

ユースケース

フォームデータ処理 APIリクエストボディパース 検索/フィルタパラメータ処理 ファイルアップロードパラメータ