J'ai un champ de tableau dans mon modèle et j'essaie de le mettre à jour.
Ma méthode de paramètre fort est ci-dessous
def post_params
params["post"]["categories"] = params["post"]["categories"].split(",")
params.require(:post).permit(:name, :email, :categories)
end
Mon action dans mon contrôleur est la suivante
def update
post = Post.find(params[:id]
if post and post.update_attributes(post_params)
redirect_to root_url
else
redirect_to posts_url
end
end
Cependant, chaque fois que je soumets la mise à jour du message, dans mon journal de développement, je vois
Unpermitted parameters: categories
Les paramètres transmis sont
Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10",
"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}}
Je veux penser que cela a quelque chose à voir avec le fait que l'attribut categories
est un tableau car tout le reste semble bien. Là encore, je peux me tromper. Alors, quel est le problème avec mon code et pourquoi ne me laisse-t-il pas enregistrer le champ des catégories alors qu'il est clairement autorisé à le faire? Merci.
Essaye ça
params.require(:post).permit(:name, :email, :categories => [])
(Ne tenez pas compte de mon commentaire, je ne pense pas que ce soit important)
dans Rails 4, ce serait,
params.require(:post).permit(:name, :email, {:categories => []})
Les types scalaires autorisés sont String
, Symbol
, NilClass
, Numeric
, TrueClass
, FalseClass
, Date
, Time
, DateTime
, StringIO
, IO
, ActionDispatch::Http::UploadedFile
et Rack::Test::UploadedFile
.
Pour déclarer que la valeur dans params doit être un tableau de valeurs scalaires autorisées, mappez la clé sur un tableau vide:
params.permit(:id => [])
C'est ce que dit la documentation des paramètres forts sur Github :
params.require(:post).permit(:name, :email, :categories => [])
J'espère que cela fonctionne pour vous.
J'ai eu le même problème, mais simplement ajouter un tableau pour permettre n'était pas suffisant. J'ai aussi dû ajouter du type. Par ici:
params.require(:transaction).permit(:name, :tag_ids => [:id])
Je ne suis pas sûr que ce soit la solution parfaite, mais après cela, le journal des "paramètres non autorisés" a disparu.
J'ai trouvé un indice pour cette solution dans cet excellent article: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters
J'ai eu le même problème mais dans mon cas j'ai dû aussi changer de:
<input type="checkbox" name="photographer[attending]" value="Baku">
à:
<input type="checkbox" name="photographer[attending][]" value="Baku">
J'espère que cela aide quelqu'un.