2016-09-29 27 views
2

私はRuby on Railsで作業しており、Rubyの許可関数を使ってハッシュからすべての値を許可しようとしています。それはむしろ単純なようですが、私はこれを動作させることができません。私はすでに許可についての参考文献を見直しており、このSOの質問how to permit an array with strong parametersに答えています。ハッシュからすべての値を許可する方法

ここに私のコードは

PERMITTED_PARAMS = [ 
    :OriginCity, 
    :OriginState, 
    { :PickupDates => {}} 
].freeze 
params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}} 
filtered_params = params.permit(PERMITTED_PARAMS) 

だと、filtered_pa​​ramsに対する所望の値は

{"OriginCity"=>"Denver", "PickupDates"=>{"0":"2016-09-30"}} 

取得する方法上の任意のアドバイスですがfiltered_pa​​ramsのための結果の値は

{"OriginCity"=>"Denver", "PickupDates"=>{}} 

ですPERMITTED_PARAMSを変更して希望の値を入力しますか?

答えて

0

あなたはリンク先の例とは異なり、配列ではなく、ハッシュ内のすべての値を許可します。

これを試してみてください:

PERMITTED_PARAMS = [ 
    :OriginCity, 
    :OriginState 
].freeze 
params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}} 
filtered_params = params.permit(PERMITTED_PARAMS).tap do |whitelisted| 
    whitelisted[:PickupDates] = params[:PickupDates] 
end 

参照:Strong parameters: allow hashes with unknown keys to be permitted

+0

':PickupDates =>のparams [:PickupDates] .try(:キー)'良いかもしれない、あなたが簡単にできるようにしたいです':PickupDates => params [:PickupDates] .try(:keys).to_a.select {| k |)は、あなたが期待しているものと一致するもののためにキーをフィルタリングします。 Integer(k)rescue nil} 'などがあります。私は強くparamsにキーに一致する正規表現を与える方法を見つけることができないので、手でそれをやっている。 –

+0

これは動作します - 多くのありがとう(そして、同意 - ハッシュ配列ではありません)! – Craig

+0

素晴らしい!はい、すべてのパラメータを受け入れることは許容されますが、強力なパラメータではそれ以上のことはできません。あなたが気にしているのであれば、必要なキーだけをフィルタリングすることができますが、コードはもっと複雑になります... –

関連する問題