我正在构建和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个!
答案 0 :(得分:1)
你的价格在美分!那没关系!
以美分处理货币是一种常见的模式。当涉及到税收或货币兑换的错误时,它也会挽救你的生命。就像他们提到的文档一样,你应该使用帮助器以人类可读的形式输出价格:
prowatchContext
如果您通过API访问数据,则可以在api中添加human_readable字段
humanized_money @money_object # => 6.50
humanized_money_with_symbol @money_object # => $6.50
money_without_cents_and_with_symbol @money_object # => $6
保存/创建模型:如果您得到一个浮动数字,您可以将浮点数更改为美分before_save
def transaction_price_human_readable
return humanized_money_with_symbol(@money_object) # or self or...
end