🚂
RailsのStrong Parametersで複数キーのネストしたパラメータにrequire/permitを適用する
例えば以下のパラメータを受け取るときにreport
とauthor
に対してrequire
を、それらの配下の値に対してpermit
を適用したい場合です。
{
"report": {
"title": "title",
"category": "study"
},
"author": {
"name": "John",
"email": "johon@example.com"
}
}
以下のように書くことができます。
report_params, author_params = params.require(%i[report author])
ActionController::Parameters.new({
report: report_params.permit(:title, :category),
author: author_params.permit(:name, :email)
}).permit!
ネストされた値に対して、require
を適用したい場合は、以下のように書くことができます。
report_params, author_params = params.require(%i[report author])
ActionController::Parameters.new({
report: report_params.permit(:title, :category).tap{ |p| p.require(:title) },
author: author_params.permit(:name, :email).tap{ |p| p.require(:name) }
}).permit!
最後に。そもそも、例のような複数のキーのパラメータを受け取るAPIは責務を持ちすぎているかもしれません。
APIを分割することの方が解決策としてベターな場合もあると思います。
Discussion