web-dev-qa-db-fra.com

Pourquoi Strong Params contient autorisé: faux

J'ai mis un binding.pry en haut de l'action update de mon contrôleur. Une fois à ce point d'arrêt, je mets params[:foo_bar] pour examiner le hachage params. Voici ce que j'obtiens:

<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"123==", "foobar"=><ActionController::Parameters {"barbazz_attributes"=>{"start_date"=>"08/27/2016", "end_date"=>"08/29/2016", "id"=>"89"}, "bazz_id"=>"3", "abc_id"=>"330", "bazzbazz_attributes"=>{"0"=>{"_destroy"=>"1", "city_id"=>"1669", "id"=>"26"}, "1"=>{"city_id"=>"1681", "id"=>"27"}, "2"=>{"city_id"=>"1672"}}} permitted: false>, "cat_id"=>["1", "1", "1"], "commit"=>"Update FooBar", "controller"=>"foo_bars", "action"=>"update", "id"=>"52"} permitted: false>  

Je supposais permitted: false est là car je n'ai pas mis en liste blanche certains attributs. J'ai regardé les attributs et il me semble que j'ai tout mis sur liste blanche.

J'utilise Rails 5 si cela arrive à faire une différence.

Question: Quel est un moyen facile de savoir pourquoi les paramètres forts renvoient params: false.

14
Neil

N'accédez pas directement aux paramètres avec params, utilisez plutôt le nom que vous avez donné à vos paramètres autorisés, par exemple: foobar_params.

Si foobar_params est défini:

def foobar_params
  params.require(:foobar).permit ...
end

Le moyen le plus simple est de lire le code source de ActionController :: Parameter , permitted = false est la valeur par défaut, sauf si vous appelez permit! pour tout autoriser, mais cela va à l'encontre de l'objectif des paramètres forts.

11
Leonel Galán