У меня есть 3 целочисленных поля, которые создают сумму при отправке.При отправке, если числовое поле переполнено для avg_price
, возможно ли отобразить сообщение в разделе ошибки if sales.errors.any?
с ошибкой, в которой указано «Средняя цена поля имеет переполнение числового поля» или что-то подобное.
В настоящее время я получаю следующую ошибку:
PG::NumericValueOutOfRange: ERROR: numeric field overflow DETAIL: A field with precision 3, scale 1 must round to an absolute value less than 10^2
Схема
create_table "sales", force: :cascade do |t|
t.integer "price_1"
t.integer "price_2"
t.integer "price_3"
t.decimal "avg_price", precision: 3, scale: 1
end
Модель
def sale_sum
if (self.price_1 && self.price_2 && self.price_3).present?
self.avg_price = ((self.price_1 + self.price_2 + self.price_3)/3.0)
end
end
Форма
<%= form_with(model: sales, local: true) do |f| %>
<% if sales.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(sales.errors.count, "error") %> prohibited this sale from being saved:</h2>
<ul>
<% sales.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.number_field :price_1 %>
<%= f.number_field :price_2 %>
<%= f.number_field :price_3 %>
<%= f.submit 'Submit' %>
<% end %>