我有一个Order模型,有unit_price,discount_price,final_price等。所有这些都是integer db中的postgres字段。当前,它的舍入值等于下一个整数,并保存该整数。但现在我发现,这不是一个好的方法,因为它可能会导致一些错误/问题在未来。因此,我计划通过to (USD*100)节省金钱价值,但当用英镑显示它时,我会写一些助手。
但是我现在找到了这个宝石,金钱-铁路,它可以做我想做的事。我正试图把我的头绕在这块宝石上,但我真的想不出这里使用的一些惯例,也不确定它是否适合我的目的。
我的默认货币是GBP。
我可以看到,在默认情况下,这个创业板使用约定_cents。
monetize :price_cents #from docs以上假设为db列price_cents。在这里,我们为什么要使用美分作为静态列?那目的是什么?除了露骨外,这里还有其他用途吗?
如果它是为了像cents那样的目的,它会自动寻找USD,如果penny寻找GBP &soforth.然后,对于我们的应用程序支持的每一种货币,我们将支持创建新的db列,如price_penny、price_cent等。如果有很多货币的话,这就没那么好了。或者,我可以在这里使用像price_smallest这样的通用名称,并使用这个名称,而不管can类型如何?也是
我搞不清楚这里的确切用途。有人能解释一下这个话题吗?
注意:我的应用程序现在没有支持其他货币的计划。但将来还可以加进去。很高兴现在考虑一下我想..。
发布于 2017-12-13 18:28:13
因此,您需要从表订单中删除列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_pricehttps://stackoverflow.com/questions/47798894
复制相似问题