モデルに配列フィールドがあり、それを更新しようとしています。
私の強力なパラメータ方法は以下です
def post_params
params["post"]["categories"] = params["post"]["categories"].split(",")
params.require(:post).permit(:name, :email, :categories)
end
コントローラーでのアクションは次のとおりです
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
しかし、アップデートを投稿するたびに、開発ログに次のように表示されます
Unpermitted parameters: categories
渡されるパラメーターは
Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10",
"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}}
私は、属性categories
が配列であるという事実と関係があると考えたいと思います。その後、再び、私は間違っている可能性があります。それで、私のコードの何が問題なのですか?明確に許可されているのに、カテゴリフィールドを保存させないのはなぜですか?ありがとう。
これを試して
params.require(:post).permit(:name, :email, :categories => [])
(私のコメントは無視してください、私はそれは重要ではないと思います)
in Rails 4、つまり
params.require(:post).permit(:name, :email, {:categories => []})
許可されるスカラータイプは、String
、Symbol
、NilClass
、Numeric
、TrueClass
、FalseClass
、Date
、Time
、DateTime
、StringIO
、IO
、ActionDispatch::Http::UploadedFile
およびRack::Test::UploadedFile
。
Paramsの値が許可されたスカラー値の配列でなければならないことを宣言するには、キーを空の配列にマップします。
params.permit(:id => [])
これが Githubの強力なパラメータードキュメント の意味です:
params.require(:post).permit(:name, :email, :categories => [])
これがあなたの役に立つことを願っています。
私は同じ問題を抱えていましたが、許可するために配列を追加するだけでは十分ではありませんでした。タイプも追加する必要がありました。こちらです:
params.require(:transaction).permit(:name, :tag_ids => [:id])
これが完璧な解決策かどうかはわかりませんが、その後、「許可されていないパラメーター」ログが消えました。
この素晴らしい投稿からその解決策のヒントを見つけました: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters
私は同じ問題を抱えていましたが、私の場合は次のものからも変更する必要がありました:
<input type="checkbox" name="photographer[attending]" value="Baku">
に:
<input type="checkbox" name="photographer[attending][]" value="Baku">
これが誰かを助けることを願っています。