2013-04-13 2 views
10

私はstrong_parameters gemを使用して配列を保存しようとしています。しかし、フォームが私の配列をどのように送っているかに問題があります。 paramsが次のようになります。strong_parametersで配列をシリアライズ

> params[:circuit] 
=> {"title"=>"Some title", ..., "viewable_tasks"=>{"0"=>"woop", "1"=>"dee", ...}} 

そして、私のcircuit_params関数は次のようになります。私は私のparamsが動作できるようにする構文を取得するように見えることはできません

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks: { }, ...) 
end 

。私は私のコンソールで取得することです:

私は私のモデルでは
> circuit_params 
=> {"title"=>"implement plug-and-play mindshare", 
"viewable_tasks"=>{"0"=>nil, "1"=>nil, "2"=>nil}, ... 

class Circuit < ActiveRecord::Base 
    serialize :viewable_tasks, Array 
    ... 
end 

私はそれは私が上accepts_nested_attributes_forを呼び出す属性で正しく動作するために得ることができることに気づいたので、これは何かを持っていることそれに関係する。任意のヘルプ

答えて

14

私は同じ問題を持っていたし、これは正しい構文た:

def circuit_params 
    params.require(:circuit).permit(:title, :id, {:viewable_tasks => []}, ...) 
end 
+1

ありがとう!ありがとうありがとう! –

-1

ため

おかげで、これを使用してみてください:

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks:[], ...) 
end 
+1

これは私のためには機能しません。構文エラーが発生します。 –

+1

私が言ったように、ハッシュは必然的に許可パラメータの最後にある必要があります – Hamdan

0

シリアライズされたアイテムがでなければなりません許可パラメータの終わり。私の経験(と私は正確に理由は分かっていません)では、シリアル化されたものの後に別のシリアル化されていないアイテムを入力することはできません。

+1

Rubyの構文が原因です。これはRailsの制限ではありません。 Rubyでは、パラメータリストの末尾にハッシュを{中括弧}で囲まずに置くことができます。ハッシュが最後にない場合、ハッシュは中括弧で囲む必要があります。 –

+0

笑..それは知っていませんでした..高すぎる...しかし、なぜですか? – Hamdan

+0

なぜ、@ハダム。最後に中括弧を外すことができるのは、おそらく便宜と可読性のためであり、最後のパラメータであるハッシュの規約を奨励するためです。 Railsの 'permit'メソッドでは、中括弧を使用すると、リストの先頭または中にハッシュを入れることができます。 –

関連する問題