Hash
is deprecated and will be removed in Rails 5.1
を見てわかる通り、Rails5.1からHashがActionParametersのメソッドとして使えなくなったので、to_hしてね!っていう内容。
対応していく中でStrongParameters対応してない実装があったので、それについてのメモ。
{
"name": "Foo Bar",
"users": {
"1": {
"name": "Jack",
"email": "a@gmail.com"
},
"3": {
"name": "Mary",
"email": "b@gmail.com"
},
"2": {
"name": "Jacob",
"email": "c@gmail.com"
},
}
}
こういう特定のHashのvaluesだけを許可したい時ってなかなか思いつかなくて、
試行錯誤した結果が下記。
usersもrequireして書くって考えるとちょっと難しかったのでメモ。
params.require(:users).permit(
params[:users].keys.map do |key|
{
"#{key}": ["name", "email"]
}
end
)
実行結果は下記みたいな感じでvaluesの指定したパラメータだけを許可することができる。
=>
<ActionController::Parameters {
"1"=><ActionController::Parameters {
{
"name"=>"Jack",
"email"=>"a@gmail.com"
} permitted: true>,
},
"2"=><ActionController::Parameters {
{
"name"=>"Mary",
"email"=>"b@gmail.com"
} permitted: true>,
},
"3"=><ActionController::Parameters {
{
"name"=>"Jacob",
"email"=>"c@gmail.com"
} permitted: true>,
},
permitted: true>