我正在使用rails 4 app,我有以下控制器代码
def index
@issue = Issue.find(1)
@sections = @issue.sections
@articles = @issue.articles
end
如果数据库为空并且出现错误,则会中断:“无法找到id = 1的问题”。检查这个问题的正确方法是什么,如果数据库中没有任何内容,它不会引发错误?
答案 0 :(得分:2)
在大多数情况下,这种例外是预期的并且会重新开始。例如,您可以使用自定义404页面进行救援。
无论如何,如果你真的不想那样,你可以使用find_by
方法,如果没有找到则输出nil
@issue = Issue.find_by(id: 1)
答案 1 :(得分:2)
您可以在控制器中处理该异常
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
现在通过
检查nil@issue.nil?
答案 2 :(得分:2)
您可以使用的一种方法是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)
。