Ich habe dies in meinem Controller:Wie kann man einen optionalen starken Parameter-Schlüssel machen, aber trotzdem darin enthaltene Parameter filtern?
params.require(:item).permit!
Lassen Sie uns diese rspec spec annehmen:
put :update, id: @item.id, item: { name: "new name" }
Es funktioniert wie erwartet, kein Fehler. wenn ich dies jedoch verwenden:
put :update, id: @item.id, item: nil
ich ActionController::ParameterMissing
, die ich will nicht zu bekommen. Es hat mit Controller-Makros zu tun, die ich für andere Aktionen benutze und über die ich die gesendeten Parameter nicht kontrollieren kann (die Makros suchen nach Benutzer-Credentials, so dass es mir eigentlich egal ist, eine #update
Aktion zu testen, ich teste nur before_filters dafür).
Also meine Frage ist: Wie mache ich params[:item]
optional, noch Filter Attribute in ihm, wenn es vorhanden ist?
Einige gute Ideen bei https://github.com/rails/rails/issues/9534. Grundsätzlich ist der Vorschlag, '# fetch' anstelle von' # require' zu verwenden, da es einen zweiten Parameter für einen Standard hat, z. B .: 'params.fetch (: item, {}). Permit!'. – mtjhax
@ Mtjhax super, thx! das wäre es wert, eine Antwort zu geben. – srecnig