2016-11-03 9 views
1

コントローラでは、ビューから受け取ったパラメータを別のオブジェクト(アクションを完了するために必要なロジックを処理する責任を負う)に渡そうとしていますが、私はStrongParametersと闘っています。他のキーを削除せずにStrongParameters許可を使用する

キーに特定の値を許可し、他のパラメータを通過させる方法はありますか?

たとえば、私のRoleモデルでは、nameactivity_idsを許可したいと思います。

コントローラは

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"]}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"} 

を取得するときにそれはそう役割が大量の割り当てを作成/更新することができます

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"], permitted: true}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"} 

を渡す必要があります。それは

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"], "injected" => "DELETE FROM roles"}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"} 

を受信したときに

とは、同じで、私はpermitを使用することができます唯一の方法はrequireた後、それを連鎖されるが、これは他のすべてのキーを削除渡す必要があります。

ありがとうございました。それが本当ならば、すべてのパラメータがデフォルトで許可されます - permit_all_parameters

permit_all_parametersを使用して

+0

あなたは 'params.require、あなたの必要性を達成するために文をチェーン必要とすることができます(:役割).require(:auth_code).require(:idは).permit'ご返信用 – Sravan

答えて

1

あなたは、これは二つの方法、

方法1を使用して達成することができます。デフォルトはfalseです。

ActionController::Parameters.permit_all_parameters = true

例:

params = ActionController::Parameters.new 
params.permitted? # => false 

ActionController::Parameters.permit_all_parameters = true 

params = ActionController::Parameters.new 
params.permitted? # => true 

The reference for permitted parameters

方法2:

あなたがあなたの必要性を達成するために文をチェーン必要とすることができます。

params = { "role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"]}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple" } 

params.require(:role).require(:auth_code).require(:id).permit! 
+0

感謝を!。どちらの方法でもロールパラメータが除外されます。私は 'require'ステートメントを連鎖させることができません。あなたのコードを実行すると、 'ActionController :: ParameterMissing:param is missingまたは値が空です:auth_code'が出ます。 – macsig

+0

大丈夫、最初のメソッド 'ActionController :: Parameters.permit_all_parameters = true'を試してみました – Sravan

+0

paramsを直接許可し、' params.permit! ' – Sravan

関連する問題