使用money-rails:如何手动设置属性的货币

时间:2014-09-23 16:41:50

标签: ruby-on-rails ruby money-rails

我目前正在使用:

  • money-rails v0.12.0
  • rails v4.1.6
  • ruby​​ 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时。

欣赏任何人必须分享的见解或经验!

1 个答案:

答案 0 :(得分:2)

使用选项 with_model_currency

monetize :dollars_per_month_cents, allow_nil: true, with_model_currency: :dollar_per_month_currency