代码之家  ›  专栏  ›  技术社区  ›  DollarChills

与错误关联的Rails NumericValueOutOfRange显示字段

  •  0
  • DollarChills  · 技术社区  · 7 年前

    我有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 %>
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   mehedi    7 年前

    你可以用 numericality Rails的ValidationHelper。

    validates :avg_price, numericality: {only_integer: true, greater_than: -100, less_than: 100}
    

        2
  •  0
  •   DollarChills    7 年前

    def error_message
      if ((self.price_1 + self.price_2 + self.price_3)/3.0) > 99.99
        errors.add(:avg_price, "can't be more then 99.99")
      end
    end
    
        3
  •  0
  •   Foram    7 年前

    可以对数字字段使用“最小”或“最大”属性。这对我们很有帮助。

    <%= f.number_field :price_1, min: 0, max: 2000 %>