Money-rails字段正在被Rails 4 + Mongoid中的强参数过滤掉

时间:2014-10-25 12:14:54

标签: ruby-on-rails mongodb mongoid strong-parameters money-rails

我使用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>

是否有人发现类似问题或知道如何申报金额字段?

谢谢! 马可

1 个答案:

答案 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

这仍会在日志中报告未经许可的参数:金额消息,但允许您按照最初的预期批量分配金额字段。

希望将来帮助某人。

我们非常感谢任何关于为什么数量字段首先被过滤的反馈。

干杯!