关于ruby:在Rails中保存记录时抑制错误

Suppress an error when saving a record in Rails

我正在将数据保存到表中。

1
2
3
4
5
Question
  title:string
  author_id:integer
  description:text
  upvotes:integer

如果"question.upvotes"值为1000000000000000000000,则会导致错误,因为它无法保存到"整数"类型列。

如何抑制此错误? 我希望我的程序继续运行,即使记录无法保存。

我试过这个,但它没有抑制错误:

1
2
3
4
5
6
... some code

if my_question.save
end

some more code...


或许只是把这个价值固定到最大可能值? 将这样的内容添加到Question模型中:

1
2
3
4
5
6
7
8
# 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
2
3
4
5
6
7
8
9
10
11
... some code

begin
  if my_question.save
    ...
  end
rescue
  # error handling
end

some more code ...

您收到ActiveRecord::StatementInvalid: PG::NumericValueOutOfRange: ERROR: integer out of range错误。 如果要准确捕获此错误,可以直接指定:

1
rescue ActiveRecord::StatementInvalid

你也可以添加一个总是会执行的块

1
ensure

您可以在此处找到有关异常处理的更多信息/此处查看异常层次结构