我正在为系统中的发票制作PDF,我希望能够在数据库中存储两位小数的数字。我正在使用MoneyRails
宝石来处理货币,我已经在数据库级别设置了precision: 10
和scale: 2
(我将postgres
作为数据库),但是我只得到1逗号后的小数位。为什么?
class AddPrecisionToInvoices < ActiveRecord::Migration[5.2]
def self.up
change_column :invoices, :total_net_amount_cents, :decimal, precision: 10, scale: 2, default: 0.00
change_column :invoices, :total_gross_amount_cents, :decimal, precision: 10, scale: 2, default: 0.00
end
def self.down
change_column :invoices, :total_net_amount_cents, :bigint
change_column :invoices, :total_gross_amount_cents, :bigint
end
end
invoice.rb
monetize :total_net_amount_cents
monetize :total_gross_amount_cents
在Rails控制台中,
invoice.total_gross_amount_cents = Money.new(20_000_00)
invoice.total_gross_amount.to_f #=> 2000.0
是否可以在数据库中存储两位小数的数字,例如20,000.00
?
我不想在视图中显示PDF,所以我希望能够将数字从前端应用程序的params中获取时放入数据库中,而无需在视图中进一步格式化。
答案 0 :(得分:0)
您可以尝试关注(在模型中使用)
3423432.43234
在此,在上面的输入number_with_delimiter
中以字符串形式提供,也可以将其以数字形式提供。
您可以直接在视图中使用names
答案 1 :(得分:0)
money-rails gem需要monetize
列才能在数据库中为数字。但是,它附带了some helper methods,可用于在模型中按需重新格式化:
# inside Invoice model
require "money-rails/helpers/action_view_extension"
class Invoice < ApplicationRecord
include MoneyRails::ActionViewExtension
# ...
def total_gross_amount_formatted
humanized_money total_gross_amount
end
end
然后在您的PDF中,您可以仅引用新的格式化属性:
@invoice_instance.total_gross_amount_formatted