Ho questo nel mio controller:Come creare una chiave opzionale per i parametri forti e ancora filtrare i parametri annidati al suo interno?
params.require(:item).permit!
Supponiamo che questa spec rspec:
put :update, id: @item.id, item: { name: "new name" }
Esso funziona come previsto, nessun errore. Tuttavia, se uso questo:
put :update, id: @item.id, item: nil
ottengo ActionController::ParameterMissing
che io non voglio ottenere. Ha a che fare con i macro del controller che uso per altre azioni e attraverso il quale non posso controllare i parametri inviati (le macro controllano le credenziali dell'utente, quindi non mi interessa davvero testare un'azione #update
, piuttosto sto solo testando before_filters per questo).
Quindi la mia domanda è: come faccio a rendere params[:item]
opzionale, ma ancora filtro gli attributi al suo interno se è presente?
Alcune buone idee a https://github.com/rails/rails/issues/9534. Fondamentalmente il suggerimento è di usare '# fetch' invece di' # require' dato che ha un secondo parametro per default, ad esempio 'params.fetch (: item, {}). Permit!'. – mtjhax
@mtjhax fantastico, grazie! varrebbe la pena di dare una risposta. – srecnig