5

我目前正在使用:

  • 钱轨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 美元”或“500”或“500 加元”,并正确保存。目前,当指定非全局货币时,它会抛出异常:

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自述文件中查看了实例货币。虽然我相信我可以完成这项工作,但我觉得这太过分了,因为它需要额外的货币字段......当我只想改变时dollars_per_month_currency

感谢任何人必须分享的任何见解或经验!

4

1 回答 1

2

使用选项with_model_currency

monetize :dollars_per_month_cents, allow_nil: true, with_model_currency: :dollar_per_month_currency
于 2014-10-29T13:16:52.607 回答