将 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
相关文档:
我目前正在使用:
金钱-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
相关文档: