Použitím Silné parametre v mojom Rails Controller, ako môžem konštatovať, že povolený parameter môže byť String
alebo an Array
?
Moje silné parametre:
class SiteSearchController < ApplicationController
[...abbreviated for brevity...]
private
def search_params
params.fetch(:search, {}).permit(:strings)
end
end
Ja chcem POST
reťazec (y) na vyhľadávanie ako String
alebo ako Array
:
Hľadanie jednej veci:
{
"strings": "search for this"
}
ALEBO, ak chcete hľadať viac vecí:
{
"strings": [
"search for this",
"and for this",
"and search for this string too"
]
}
aktualizácia:
účel: Vytváram API, kde môžu používatelia "hromadne" žiadať (odpovede získavajú prostredníctvom web-hooks
) alebo podať jednorazovú žiadosť (okamžitá odpoveď) všetko v rovnakom koncovom bode. Táto otázka je len malou časťou mojej požiadavky.
Ďalšia časť bude robiť rovnakú logiku, kde umožníme vyhľadávanie na viacerých stránkach, t.j.
[
{
"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"
]
}
]
ALEBO na jednej stránke:
{
"page": "/section/look-at-this-page",
"strings": "search for this"
}
(čo ma núti mať Silné parametre povoliť Object
alebo an Array
na odoslanie.
Vyzerá to ako základná vec, ale vonku nič nevidím.
Viem, že by som mohol len vyrobiť strings
param pole, a potom vyžadujú hľadanie 1 vec, aby len 1 hodnota v poli ... ale chcem, aby tento parameter bol robustnejší ako to.
odpovede:
6 pre odpoveď č. 1Môžete skontrolovať, či params[:strings]
je pole a práca odtiaľ
def strong_params
if params[:string].is_a? Array
params.fetch(:search, {}).permit(strings: [])
else
params.fetch(:search, {}).permit(:strings)
end
end
8 pre odpoveď č. 2
Parameter môžete povoliť iba dvakrát - raz pre pole a raz pre skalárne hodnoty.
def search_params
params.fetch(:search, {}).permit(:strings, strings: [])
end