如果数据库为空,则处理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?
- ActiveRecord :: Base.transaction应该在哪里?
- Rails中的命名空间模型:联合的状态是什么?
- 如何在模型观察器中获取current_user?
- ActiveRecord … activerecord-mysql-adapter
- 如何通过单独表格中的总和来订购我的参赛作品?
- ruby(1.9.3)on rails(3.2.3)Activerecord-odbc-adapter
- 您将如何使用rails和ActiveRecord中的引用和引用对文章进行建模?
- 基于字段的嵌套模型的条件顺序
- 在尝试保存大(ish)整数值时,获取指示编号的错误“超出ActiveRecord :: Type :: Integer且限制为4”的范围