如果数据库为空,则处理ActiveRecord错误

我正在使用rails 4 app,我有以下控制器代码

def index @issue = Issue.find(1) @sections = @issue.sections @articles = @issue.articles end 

如果数据库为空并且出现错误,则会中断:“无法找到id = 1的问题”。 检查这个问题的正确方法是什么,如果数据库中没有任何内容,它不会引发错误?

你可以使用的一种方法是exists? 主动记录方法,如下:

 @issue = Issue.where(id: 1) if @issue.exists? # do something if it exists else # do something if it is missing end 

旁注:由于您试图通过id查找,因此您不一定需要.where部分; 你可以简单地做: Issue.exists?(1)

exists? 有关APIDoc的文档

在大多数情况下,这种例外是预期的并且会重新开始。 例如,您可以使用自定义404页面进行营救。

无论如何,如果你真的不想那样,你可以使用find_by方法,如果没有找到,将输出nil

 @issue = Issue.find_by(id: 1) 

您可以在控制器中处理该exception

 rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found def record_not_found flash[:alert] = "invalid information" redirect_to root_url end 

或者您可以使用where子句

 @issue = Issue.where(id: 1).first 

现在检查是否为零

 @issue.nil?