59

モデルに配列フィールドがあり、それを更新しようとしています。

私の強力なパラメータメソッドは以下です

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"=>"eileen_hansen@hayetokes.info", "categories"=>",2"}}

categories他のすべてがうまく見えるので、属性が配列であるという事実と関係があると思いたいです。繰り返しますが、私は間違っている可能性があります。では、私のコードの何が問題なのですか?なぜ明らかに許可されているのに、カテゴリ フィールドを保存できないのでしょうか? ありがとう。

4

6 に答える 6

3

私は同じ問題を抱えていましたが、許可するために配列を追加するだけでは十分ではありませんでした。タイプも追加する必要がありました。こちらです:

params.require(:transaction).permit(:name, :tag_ids => [:id])

これが完璧な解決策かどうかはわかりませんが、その後、「許可されていないパラメーター」のログが消えました。

この優れた投稿からその解決策のヒントを見つけました: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters

于 2015-07-18T08:36:26.983 に答える