【发布时间】:2018-03-07 16:34:03
【问题描述】:
我正在构建 Rails 5 API,我试图在其中发送金额并将其存储在 PostgresQL 数据库中。我发送的金额为 2.4,但我在数据库中看到仅存储了 2 个。我做错了什么?
我的迁移:
class CreateTransactions < ActiveRecord::Migration[5.1]
def change
create_table :transactions do |t|
t.monetize :transaction_price, amount: { null: true, default: nil }
t.timestamps
end
end
end
我的模型是:
class Transaction < ApplicationRecord
monetize :transaction_price_cents
end
我的控制器:
class TransactionsController < ApiController
def create
transaction = Transaction.new(transaction_param)
if transaction.save
render json: { status: 'SUCCESS', data:transaction }, status: :ok
end
end
private
def transaction_param
params.require(:transaction).permit(:transaction_price_cents)
end
end
我正在用邮递员发送这个 json:
{
"transaction_price_cents": 345.23
}
我得到的回应:
{
"status": "SUCCESS",
"data": {
"id": 1,
"transaction_price_cents": 345,
"transaction_price_currency": "USD",
}
}
我想要 345.23 或 34523,但它只给我 345!
【问题讨论】:
-
如果你想用美元做逻辑,金额不应该大 100 倍吗?它甚至在与值
transaction_price_cent关联的名称中。 -
我完全明白。您的意思是在将价格发送到数据库之前,我必须将价格乘以 100(我的意思是使其成为美分)?我认为 Gem 会为我做到这一点。
标签: ruby-on-rails ruby rubygems ruby-on-rails-5 money-rails