mam to w moim kontrolera:Jak utworzyć opcjonalny klucz o silnych parametrach, a mimo to filtrować zagnieżdżone w nim params?
params.require(:item).permit!
Przyjmijmy tę rspec specyfikację:
put :update, id: @item.id, item: { name: "new name" }
To działa zgodnie z oczekiwaniami, nie błąd. Jednakże, jeśli mogę użyć tego:
put :update, id: @item.id, item: nil
mam ActionController::ParameterMissing
który nie chce się dostać. Ma to związek z makrami kontrolera, których używam do innych akcji i przez które nie mogę kontrolować wysyłanych parametrów (makra sprawdzają poświadczenia użytkownika, więc nie obchodzi mnie właściwie testowanie akcji #update
, raczej po prostu testuję before_filters dla tego).
Moje pytanie brzmi: w jaki sposób mogę uczynić params[:item]
opcjonalną, ale nadal filtrować atrybuty w nim, jeśli jest obecny?
kilka dobrych pomysłów na https://github.com/rails/rails/issues/9534. Zasadniczo sugeruje się użycie '# fetch' zamiast' # require', ponieważ ma on drugi parametr domyślny, np .: 'params.fetch (: item, {}). Permit!'. – mtjhax
@mtjhax niesamowite, thx! na które warto byłoby udzielić odpowiedzi. – srecnig