我的Rails模型中有一个哈希字段,我正在尝试更新它。
属性detail
首先通过迁移生成为text
类型。在我的模型中,通过hash
属性
store :detail
class Request < ActiveRecord::Base
store :detail
end
我的强项是如此:
params.require(:request).permit(:name, :action, :detail => {})
但是,当我的参数按
进行时Parameters: {"request"=>{"name"=>"temp", "action"=>"create", "detail"=>{"test"=>"fdsf"}}}
我被告知有一个Unpermitted parameter: test
,尽管test
参数是detail
哈希的一部分。
我该如何解决这个问题?谢谢!
答案 0 :(得分:6)
params.require(:request).permit(:name, :action, detail: [:test])
另一个选项(例如,如果您事先不知道可能的字段名称)将在客户端序列化detail
到json字符串,接受它作为字符串并在之后反序列化为哈希。
答案 1 :(得分:0)
这个(相当古老的)issue非常有趣地解决了你的问题
考虑到您的哈希值包含的值多于SELECT
DATE(flightvalidate) AS flightValidateDate,
Count(flightid) AS count
FROM
flight
WHERE
flightstatus = 0
AND flightvisibility = 1
AND DATE(flightvaliddate) >= CURDATE() - INTERVAL 1 MONTH
GROUP BY flightValidateDate
ORDER BY flightvalidate
,您可以尝试使用:test
.tap
或稍微不那么动态:
params.require(:request).permit(:name, :action).tap do |whitelisted|
whitelisted[:detail] = params[:request][:detail]
end
这个blogpost总结了不同的方法。
修改强>
您需要params.require(:request).permit(:name, :action, :detail => [:test])
列的类型为&#39; text&#39;能够将哈希保存为字符串。在您的detail
模型中,将其添加到顶部:
Request
因为它允许将字符串化的serialize :detail
解释为哈希