Railspermitで複数の型に対応したストロングパラメータ作る permitの概要と基本的な使い方はこちら。
一言で言うと、permitで許可した値のみをparamsとして両可能にする、みたいな感じ。
Railsではpermitを通したparamsじゃ無いとDBに保存できない。これによって不正リクエストを保存してしまうリスクを回避してる。
で、今回の主題はparamsの型が複数ある時に1行でいい感じにストロングパラメータ化する方法。
string、string[]両方に対応できる様にしている。今回のparamsは以下の通り。
code:ruby
# データ型はContentfulのwebhookでAPI叩かれた時のparams。
# en-USがstringの時
payload = {
fields: {
key => {
'en-US': field_value
}
}
}
# en-USが配列の時
payload = {
fields: {
key => {
}
}
}
で、これらを1つのparamsでやる方法が以下の通り。
code:ruby
def fild_value
params.permit(fields: [key => [:'en-US', %i(en-US), { 'en-US': [] }]]).dig('fields', key, 'en-US')
end
.digで:en-USの中身の取得までしてるコード。
ごちゃごちゃしててややこしい。ポイントは以下の部分。
code:ruby
params.permit(:attr, { :attr => [] }, { :attr => {} })
:attrの対して複数の型を受け付けられる様にしている。
参考