📋
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リクエストボディパース
検索/フィルタパラメータ処理
ファイルアップロードパラメータ