私のRailsコントローラーで強力なパラメーターを使用して、許可されたパラメーターがString
またはArray
であるとどのように述べることができますか?
私の強いパラメータ:
class SiteSearchController < ApplicationController
[...abbreviated for brevity...]
private
def search_params
params.fetch(:search, {}).permit(:strings)
end
end
POST
文字列をString
またはArray
として検索したいのですが。
1つのものを検索するには:
{
"strings": "search for this"
}
または、複数のものを検索するには:
{
"strings": [
"search for this",
"and for this",
"and search for this string too"
]
}
更新:
目的:ユーザーがリクエストを「バッチ処理」(web-hooks
経由で応答を取得)したり、1回限りのリクエスト(即時応答を取得)したりできるAPIを作成しています。同じエンドポイント。この質問は私の要件のほんの一部です。
次の部分では、これと同じロジックを実行します。ここでは、複数のページで検索を実行できるようにします。
[
{
"page": "/section/look-at-this-page",
"strings": "search for this"
},
{
"page": "/this-page",
"strings": [
"search for this",
"and for this",
"and search for this string too"
]
}
]
または単一ページ:
{
"page": "/section/look-at-this-page",
"strings": "search for this"
}
(これにより、Strong ParamsObject
またはArray
の送信を許可する必要があります。
これは基本的なことのように思えますが、私はそこに何も見ていません。
strings
paramを配列にして、配列に1つの値を含めるには、1つのものを検索する必要があることはわかっていますが、このパラメーターをそれよりも堅牢にしたいのです。
params[:strings]
は配列であり、そこから機能します
def strong_params
if params[:string].is_a? Array
params.fetch(:search, {}).permit(strings: [])
else
params.fetch(:search, {}).permit(:strings)
end
end
パラメータを2回許可できます。1回は配列用、もう1回はスカラー値用です。
def search_params
params.fetch(:search, {}).permit(:strings, strings: [])
end