Rails хранит числа в базе данных с двумя десятичными знаками после запятой - PullRequest
0 голосов
/ 04 января 2019

Я делаю PDF для счетов в моей системе, и я хотел бы иметь возможность хранить числа с двумя десятичными разрядами в базе данных. Я использую MoneyRails gem для работы с валютами, у меня есть настройки 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

В консоли рельсов,

invoice.total_gross_amount_cents = Money.new(20_000_00)
invoice.total_gross_amount.to_f #=> 2000.0

Можно ли хранить в БД числа с двумя десятичными разрядами, например 20,000.00? Я не хочу отображать PDF-файл в виде, поэтому хочу иметь возможность перетаскивать число в мою БД, поскольку я получил его из параметров из моего интерфейсного приложения без дальнейшего форматирования в виде.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Для гема-рельсов требуется, чтобы в базе данных были числовые столбцы monetize. Тем не менее, он поставляется с некоторыми вспомогательными методами , которые вы можете использовать для переформатирования по своему желанию в вашей модели:

# 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
0 голосов
/ 04 января 2019

Вы можете попробовать следующее, (используя в модели)

ActiveSupport::NumberHelper::number_to_delimited('%.2f' % '3423432.43234', delimiter: ",", separator: ".")

# => "3,423,432.43"

Здесь, в приведенном выше вводе 3423432.43234 предоставляется в виде строки, вы также можете указать его как число.

Вы можете напрямую использовать number_with_delimiter в поле зрения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...