📋

Params & Strong Parameters

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

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

paramsソース:

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

  • クエリ文字列: ?page=2 → params[: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リクエストボディパース 検索/フィルタパラメータ処理 ファイルアップロードパラメータ