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
.
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.