我的Order
模型包含unit_price
,discount_price
,final_price
等。
integer
db中的所有字段都是postgres
个字段。目前它的舍入量为下一个整数并保存。但现在我发现这不是一个好方法,因为它可能会在将来导致一些错误/问题。所以我
计划通过做(USD*100
)来节省金钱价值,但是当显示时通过写一些帮助者以英镑显示它。
但我现在发现这个宝石money-rails可以做我想要的。我试图围绕这个宝石,但我真的不知道这里使用的一些惯例也不确定它适合我的目的
我的默认货币为GBP
。
我可以看到这个gem默认使用约定_cents
monetize :price_cents #from docs
上面假设一个db列price_cents
。
这里为什么我们应该使用美分作为静态列?那是什么意思?除了在这里明确任何其他用途?
如果用于cents
的目的,它会自动查找USD
,如果penny查找GBP
& soforth ...然后对于我们的应用程序支持的每种货币,我们将最终创建新的数据库列,如price_penny
,price_cent
等。如果有很多货币,那就不是那么好了。或者我可以在这里使用通用名称,例如price_smallest,并使用它而不管当前类型?
还
我无法在这里找到确切的用例。有人能否对这个话题有所了解?
注意:我的应用目前没有支持其他货币的计划。 但是可以在将来添加。很高兴考虑到现在我想..
答案 0 :(得分:0)
因此您需要从表格订单中删除列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添加了money列类型,您需要使用add_monetize而不是add_money列。”
然后确保将以下内容添加到app/models/order.rb
monetize :unit_price
monetize :discount_price
monetize :final_price