У меня есть поле с именем price в моей базе данных, которое является десятичным полем, и в моем ответе API JSON оно возвращается в виде строки.
Я хотел применить некоторые проверки к полю, которые позволили бы максимум 2цифры после точки и выяснилось, что если я использую десятичное поле, я могу применить точность на уровне БД.
t.decimal "price", precision: 10, scale: 2
Затем я хочу рассчитать общую стоимость в объекте обслуживания:
services / statistics / month_rides_generator.rb
class CurrentMonthRidesGenerator
def initialize(current_user)
@current_user = current_user
end
def call
user_current_month_rides_by_day.map do |date, rides_on_day|
{
day: formatted_date(date),
total_distance: total_distance(rides_on_day),
avg_ride: avg_ride(rides_on_day),
avg_price: avg_price(rides_on_day),
total_price: total_price(rides_on_day)
}
end
end
...
def total_price(rides)
rides.map(&:price).sum
end
end
app / api / statistics / stats_api.rb
get '/current_month' do
Statistics::CurrentMonthRidesGenerator.new(current_user).call
end
но в ответе API это поле является строкой.
{
"day": "November, 8th",
"total_distance": "9km",
"avg_ride": "9km",
"avg_price": "100.0PLN",
"total_price": "100.0"
}
Я хочу, чтобы это поле было возвращено в том виде, в котором оно было сохранено, поскольку мне нужно, чтобы во внешнем интерфейсе мне было необходимо использовать число с плавающей запятой / десятичное число для выполнения других вычислений.
Почему оно возвращает строку, когдаэто десятичное поле?Как я могу это исправить?