我目前正在使用:
v0.12.0
v4.1.6
v2.1.3
用例
我正在更新名为dollars_per_month
的货币类型属性,我使用money-rails
迁移帮助程序(即add_money
)创建了该属性。
所以,在我的模型中我有:
monetize :dollars_per_month_cents, allow_nil: true
我目前的架构有:
t.integer "dollars_per_month_cents"
t.string "dollars_per_month_currency", default: "CAD", null: false
在config / initializers中全局设置货币:
config.default_currency = :cad
问题
我希望用户能够在文本字段中输入“500 USD”或“500”或“500 CAD”,并正确保存。目前,当指定非全局货币时,它会抛出异常:
RuntimeError: Can't change readonly currency 'CAD' to 'USD' for field 'dollars_per_month'
这是有道理的 - 我可以理解为什么这自然会被强制执行。
然而..我想强行更改货币而不关心此类强制执行,因为此字段仅用于捕获问题的答案。
简单的解决方案(尽管未来缺乏便利性)是将其转换为纯文本。但是,我想知道是否可以使用RubyMoney和/或money-rails执行此操作而不触及应用程序的其余部分。
备注
我已尝试更改dollars_per_month_currency
并保存模型,但dollars_per_month
仍会返回基于CAD的Money对象。
我在money-rails readme中查看了Instance Currencies。虽然我相信我可以做到这一点,但我觉得它太过分了,因为它需要额外的货币字段......当我只想改变dollars_per_month_currency
时。
欣赏任何人必须分享的见解或经验!
答案 0 :(得分:2)
使用选项 with_model_currency :
monetize :dollars_per_month_cents, allow_nil: true, with_model_currency: :dollar_per_month_currency