如果他愿意,我允许我的用户以高级形式输入自定义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
它仍然没有抓住它......
答案 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