我正在将数据保存到表中。
Question
title:string
author_id:integer
description:text
upvotes:integer
如果“question.upvotes”值为1000000000000000000000,则会导致错误,因为它无法保存到“整数”类型列。
如何抑制此错误?我希望我的程序继续运行,即使记录无法保存。
我试过这个,但它没有抑制错误:
... some code
if my_question.save
end
some more code...
答案 0 :(得分:2)
或许只是把这个价值固定到最大可能值?在Question
模型中添加以下内容:
# app/models/question.rb
UPVOTE_MAX_VALUE = 2_147_483_647 # integer max value in postgresql
before_validation :check_upvote_max_size
private
def check_upvotes_max_size
self.upvotes = UPVOTE_MAX_VALUE if upvotes > UPVOTE_MAX_VALUE
end
答案 1 :(得分:1)
... some code
begin
if my_question.save
...
end
rescue
# error handling
end
some more code ...
您收到ActiveRecord::StatementInvalid: PG::NumericValueOutOfRange: ERROR: integer out of range
错误。如果要准确捕获此错误,可以直接指定:
rescue ActiveRecord::StatementInvalid
你也可以添加一个总是用
执行的块ensure
You can find more about exceptions handling here / And see exceptions hierarchy here