2016-06-23 7 views
2

私のRailsモデルにハッシュフィールドがあり、それを更新しようとしています。 属性detailは、最初にtextタイプとして移行によって生成されました。Railsでハッシュを許可されていないパラメータ

params.require(:request).permit(:name, :action, :detail => {}) 

しかし、私のパラメータは

Parameters: {"request"=>{"name"=>"temp", "action"=>"create", "detail"=>{"test"=>"fdsf"}}} 

などを通過するとき:あとがきは、私のモデルでは、それは私のstrong_paramsのようなある store :detailプロパティを通じて hash

class Request < ActiveRecord::Base 
    store :detail 
end 

としました

testパラメータがdetailハッシュの一部であるにもかかわらず、Unpermitted parameter: testがあると言われています。

これを修正するにはどうすればよいですか?ありがとう! (あなたは事前に可能なフィールド名がわからない場合は例えば)

答えて

3
params.require(:request).permit(:name, :action, detail: [:test]) 

別のオプション、クライアント側でJSON文字列にdetailをシリアライズ文字列としてそれを受け入れ、その後ハッシュにデシリアライズすることです。

0

あなたのハッシュを考えると、この(かなり古い)issueタックルあなたの問題は非常に興味深いこと

あなたは.tap

params.require(:request).permit(:name, :action).tap do |whitelisted| 
    whitelisted[:detail] = params[:request][:detail] 
end 

かやや少ないダイナミックで解決策を試みることができる:test以上の値で構成されています

params.require(:request).permit(:name, :action, :detail => [:test]) 

このblogpostは、 s。あなたは文字列としてハッシュを保存できるようにするタイプ「テキスト」であるように、あなたのdetail列を必要とする

編集

。あなたのRequestモデルでトップにこれを追加します。

serialize :detail 

それは私があなたのホワイトリストソリューションをやってみましたし、同じ問題がポップアップ...それは思えないハッシュ

+0

として文字列化:detailを解釈することができますようどのように私はすべての値を一覧表示する必要はありません。 – uccblack

+0

私の答えの「編集」部分をチェックしましたか? ;)dbに値がどのように格納されているかは、オブジェクトに対して許可するパラメータによっては処理されません。 –

関連する問題