我使用Rails 4+ MongoDB(mongoId)+ money-rails gem并拥有以下两种型号:
class MyModel
field :date, type: Date
field :amount, type: Money
..............
end
class OtherModel < MyModel
........
end
在控制器上,许可证参数功能如下:
def my_model_params
base=[:field1, field2, :field3, :amount]
params.permit(:field11, :field22, :field33, :field44, other_model: base)
end
现在,金额字段是Money类型,但在此之前它是一个浮点字段。使用float,create方法没有问题,但是现在:amount字段的类型为Money,我在日志文件中获取消息未许可参数:金额。 当我想创建一个新的OtherModel对象时会发生这种情况:
OtherModel.create(field1: "aaa", field2: "bbb", field3: "ccc", :amount=>Money.new(12345))
我已经尝试了几种定义my_model_params方法的方法,以便它接受amount字段,包括我在StackOverflow中找到的与此相关的所有选项,但我一直得到相同的错误。我发现这项工作的唯一方法是使用许可证!
def my_model_params
base=[:field1, field2, :field3, :amount]
params.permit!
end
哪个有效,因为它允许所有字段,但它显然不是质量分配保护的好选择。
在params的散列中,由于money-rails gem,数量字段如下所示:
"amount"=>#<Money fractional:12345 currency:USD>
是否有人发现类似问题或知道如何申报金额字段?
谢谢! 马可
答案 0 :(得分:1)
嗯,我能够根据这个link找到解决方案。如果您按上述方法添加金额,我不确定为何会过滤掉金额,但为了使其有效,我使用了以下解决方案:
def my_model_params
base=[:field1, field2, :field3]
params.permit(:field11, :field22, :field33, :field44, other_model: base).tap do |whitelisted|
whitelisted[:other_model][:amount] = params[:other_model][:amount]
end
end
这仍会在日志中报告未经许可的参数:金额消息,但允许您按照最初的预期批量分配金额字段。
希望将来帮助某人。
我们非常感谢任何关于为什么数量字段首先被过滤的反馈。
干杯!