如何救援ActiveRecord :: StatementInvalid错误

时间:2017-05-19 16:44:25

标签: ruby-on-rails ruby postgresql activerecord

有没有人知道如何在rails中挽救这个ActiveRecord :: StatementInvalid错误?控制台显示“PG :: InvalidTextRepresentation:ERROR:整数...的无效输入语法”。我已经尝试在救援区插入一个撬,但它从未被调用过。

  if (resource_params[:term].present?)
    begin
      key = resource_params[:term]
      scope = scope.where("id = ? OR item_type = ? OR item_id = ? OR event = ? OR object ILIKE ?", key, key, key, key, "%#{key}%") 
    rescue
      # handle error 
    end 
  end

请注意我知道如何防止错误发生(即需要将密钥转换为id列的整数类型)。但是,我试图理解为什么它永远不会到达救援区。

更新:我的初始帖子包含语法错误(即:rescue e =>错误),正如其他人正确指出的那样。我仍然收到相同的错误,没有语法错误;我更新了代码以删除不正确的语法。

2 个答案:

答案 0 :(得分:4)

这不是救援的正确语法:

print

如果我尝试使用此功能,我会rescue e => error

拯救特定错误类的标准方法是使用:

undefined local variable or method 'e'

做一次"裸体救援" (通常建议不要这样做),遗漏班级名称:

rescue ActiveRecord::StatementInvalid => e

请注意,在所有这些情况下,如果您不需要指向错误对象的变量,则可以省略rescue => e

答案 1 :(得分:0)

rescue ActiveRecord::StatementInvalid => e是正确的语法,应该可以正常工作,但请记住,实际上应该在该块中引发异常。

当我们实际尝试使用其输出时,

rails会执行查询(例如,我们显示查询输出的呈现页面)。