1

我有一个Order带有unit_price,discount_price等的模型final_price。所有都是db中的integer字段。postgres目前它的舍入量为下一个整数并保存。但是现在我发现这不是一个好方法,因为它可能会在将来导致一些错误/问题。所以我计划通过do()来节省一分钱的价值,USD*100但是当显示时通过编写一些帮助程序以英镑显示它。

但我现在发现这个宝石可以做我想做的事我正试图围绕这个宝石,但我无法真正弄清楚这里使用的一些约定,也不确定它是否适合我的目的

我的默认货币是GBP.

我可以看到这个 gem_cents默认使用约定

monetize :price_cents #from docs

上面假设有一个 db 列price_cents。这里为什么要使用 cents 作为静态列?这样做的目的是什么?除了在这里明确之外还有其他用途吗?

如果它的目的是为了cents自动查找USD,如果 penny 查找GBP& soforth...那么对于我们的应用程序支持的每种货币,我们最终将创建新的数据库列,例如price_pennyprice_cent等等。如果有很多货币。或者我可以在这里使用一个通用名称,比如 price_smallest 并且不管货币类型如何都可以使用它?还

我无法正确弄清楚这里的确切用例。有人可以对这个话题有所了解吗?

注意:我的应用程序现在没有支持其他货币的计划。但将来可能会添加。很好考虑,现在我认为..

4

1 回答 1

1

因此,您需要从订单表中删除列 unit_price、discount_price、final_price。并将它们正确添加回来add_monetize

创建一个新的迁移文件,如下所示:

class FixPricesInOrders < ActiveRecord::Migration[5.0]
  def change
    # Remove Columns
    remove_column :orders, :unit_price
    remove_column :orders, :discount_price
    remove_column :orders, :final_price
    # Add money
    add_monetize :orders, :unit_price
    add_monetize :orders, :discount_price
    add_monetize :orders, :final_price
  end
end

来自https://github.com/RubyMoney/money-rails

“由于在 Rails 4.2 中为 PostgreSQL 添加了货币列类型,您将需要使用 add_monetize 而不是 add_money 列。”

然后确保将以下内容添加到app/models/order.rb

monetize :unit_price
monetize :discount_price
monetize :final_price
于 2017-12-13T18:28:13.970 回答