Rails:无效SQL查询的捕获异常

时间:2016-10-27 18:37:34

标签: mysql ruby-on-rails

如果他愿意,我允许我的用户以高级形式输入自定义SQL查询,并将他的输入直接输入"其中"我的搜索方法中的子句。

但是,当然,有时用户会输入无效的SQL查询。现在,这会导致出现错误页面。我希望它显示一个"无效的语法"言。

def self.search(search)
    if search
        begin 
          includes(:hobbies, :games).where(search)
        rescue SQL_syntax_error_exception # ?
          #display error message
        end

我对此感到困惑,因为即使我尝试了(据说)包罗万象的

rescue => e

它仍然没有抓住它......

1 个答案:

答案 0 :(得分:1)

我肯定建议这样做 - 你将很难用整数引号清理整个where子句。

至于捕捉错误,

begin
  includes(:hobbies, :games).where(search)
rescue ActiveRecord::StatementInvalid => e
  # do whatever
end

请注意,此处可能会发生一系列异常(不仅仅是ActiveRecord :: StatementInvalid),因此您可能需要执行以下操作:

  ...
rescue Exception => e
  if e.class.ancestors.include? ActiveRecord::ActiveRecordError
    # rescue stuff
  else
    # re-throw the exception
  end
end