1

我正在使用 Rails 4+ MongoDB (mongoId) + money-rails gem 并拥有以下 2 个模型:

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

现在,amount 字段是 Money 类型,但在此之前它是一个 float 字段。使用 float,create 方法没有问题,但现在 :amount 字段的类型为 Money,我在日志文件中显示消息Unpermitted parameter: amount。当我想创建一个新的 OtherModel 对象时会发生这种情况:

OtherModel.create(field1: "aaa", field2: "bbb", field3: "ccc", :amount=>Money.new(12345))

我尝试了几种定义 my_model_params 方法的方法,以便它接受金额字段,包括我在 StackOverflow 找到的所有与此相关的选项,但我一直收到相同的错误。我发现完成这项工作的唯一方法是使用许可!

def my_model_params
  base=[:field1, field2, :field3, :amount]
  params.permit!

end

之所以有效,是因为它允许所有字段,但显然不是批量分配保护的好选择。

在 params 的哈希值上,由于 money-rails gem,amount 字段如下所示:

"amount"=>#<Money fractional:12345 currency:USD>

有没有人发现类似的问题或知道如何声明金额字段?

谢谢!马可

4

1 回答 1

1

好吧,基于此链接,我能够找到解决方案。我不确定如果按上述方式添加金额会被过滤掉,但为了使其正常工作,我使用了以下解决方案:

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

这仍会在日志上报告 Unpermitted parameter: amount 消息,但允许您按照最初的预期批量分配金额字段。

希望它对将来的人有所帮助。

任何关于为什么首先过滤金额字段的反馈,将不胜感激。

干杯!

于 2014-11-08T10:56:37.843 回答