2013-07-25 10 views
49

モデルに配列フィールドがあり、更新しようとしています。Rails 4配列の許容されないパラメータ

私の強いパラメータ法は、下にある

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は他のすべてがうまく見えるので、それは配列であると考えています。そして再び、私は間違っている可能性があります。だから、私のコードに何が問題なのですが、それが許可されているときにカテゴリフィールドを保存させないのはなぜですか?ありがとう。

+0

あなたは試してみましたもっと簡単な例? – Slicedpan

答えて

126

この

params.require(:post).permit(:name, :email, :categories => []) 

を試してみてください

+1

こんにちは、私は問題を抱えている(#69846105528920)、文字列を持っている(#8248680) – kalelc

+0

こんにちは、配列のカテゴリに応じてポストを見つける方法があります 'Post.find_by(tags: 'sports ') '? –

+4

なぜこの作品が@slicedpan –

8

許可スカラ型StringSymbolNilClassNumericTrueClassFalseClassDateTimeです(私のコメントを無視し、私は問題はないと思います) 、DateTime,StringIO,IO,ActionDispatch::Http::UploadedFileおよびRack::Test::UploadedFileである。

params.permit(:id => []) 

これはstrong parameters documentation on Githubが言うことである:

params.require(:post).permit(:name, :email, :categories => []) 

私は願ってのparamsの値が許可され、スカラー値が空の配列のキーをマップの配列でなければならないことを宣言するために

これはあなたのために働く。なり、レール4、中

37

params.require(:post).permit(:name, :email, {:categories => []}) 
+4

これは私にとっては効果的ですが、モデルでその属性のシリアライズを既に定義しているのであれば、別のハッシュにする必要がありますか? – barnett

1

私は同じ問題を抱えていたが、私の場合は私がから変更することもありました。に

<input type="checkbox" name="photographer[attending]" value="Baku">

<input type="checkbox" name="photographer[attending][]" value="Baku">

希望はこれですオメオネ。

1

私は同じ問題がありましたが、単に許可するアレイを追加するだけでは十分ではありませんでした。タイプも追加しなければならなかった。この方法では:

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

私はこの素晴らしいポストからその解決のためのヒントが見つかりました、のparamsオブジェクトは、単純なハッシュではありませんIIRCそれは、あなたがカテゴリパラメータの値を設定する方法が原因かもしれませんhttp://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters

関連する問題