将 money-rails 与 mongoid 一起使用:如何为每个模型实例设置货币

Using money-rails with mongoid: How to set currency per model instance

我目前正在使用:

金钱-rails v1.12 railsv6 mongoid v7

我想设置每个模型实例使用的默认货币。

我已经在我的模型中设置了如下所示的字段

field :price, type: Money, with_model_currency: :currency

但是当我尝试创建或获取记录时出现此错误

Mongoid::Errors::InvalidFieldOption
message:
  Invalid option :with_model_currency provided for field :price.

如何在 rails mongoid 应用程序中使用 with_model_currency 选项? 我还能如何在 rails mongoid 应用程序中处理资金?

当您在 mongoid 字段中使用 type: Money 时,您表示该字段应该特别是 class 进行序列化/反序列化。 RubyMoney 包含序列化为 mongo 的方法。 with_model_currency 不是宏 field 的有效选项。

您将此方法与 money-rails monetize 混淆了,后者确实有一个名为 with_model_currency.

的选项

一句话:删除with_model_currency: :currency选项,它在mongoid字段上不可用。

如果您想设置默认货币,您需要使用 Money.default_currency = Money::Currency.new("CAD")

您可能还想编写自己的序列化程序(未测试):

class MoneySerializer

    class << self

        def mongoize(money)
            money.to_json
        end

        def demongoize(json_representation)
            money_options = JSON.parse json_representation
            Money.new(money_options['cents'], money_options['currency_iso']
        end

        def evolve(object)
            mongoize object
        end
    end
end



field :price, type: MoneySerializer

相关文档: