/ / Rails Strong Parameters - Povoliť, aby bol parameter Array or String - ruby-on-rails, strong-parametre

Šikmé parametre koľajníc - Povoliť parameter, aby bol pole alebo reťazec - rubínovo-na-koľajniciach, silné parametre

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ď č. 1

Môž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