2016-06-23 63 views
2

我在我的Rails模型中有一個哈希字段,並且正試圖更新它。 屬性detail首先通過遷移生成,類型爲text。後記,在我的模型,它被設置爲hash通過store :detail財產使用Rails中的哈希未經允許的參數

class Request < ActiveRecord::Base 
    store :detail 
end 

我strong_params是這樣:

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

然而,當我的參數經歷作爲

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

儘管test參數是detail散列的一部分,但我聽說有Unpermitted parameter: test

我該如何解決這個問題?謝謝!

回答

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

另一個選項(例如,如果你不事先知道可能的字段名)將序列化detail以JSON字符串在客戶端,接受它作爲字符串和反序列化到哈希之後。

0

這(而舊)issue剷斷你的問題很有趣

考慮您的哈希包含多個值比:test你可以嘗試用.tap

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

還是稍差動態的解決方案:

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

This blogpost sum up up different approache秒。

編輯

你需要你的detail列的類型爲「文本」,以能夠哈希保存爲一個字符串。在你Request模型中,這增加了頂部:

serialize :detail 

因爲這將使解釋字符串化:detail作爲哈希

+0

我試着做你的白名單解決方案,同樣的問題突然出現了......它似乎首選的,但我沒有列出所有的價值。 – uccblack

+0

您是否檢查過我的答案中的「編輯」部分? ;)如何將值存儲在數據庫中不由您爲對象允許的參數處理。 –