当找不到id时,整个控制器的一般救援 - RoR

dch*_*cke 15 activerecord ruby-on-rails exception rescue

我偶然发现了我的应用程序查找数据库中不存在的id的情况.抛出异常.当然,对于任何Web开发人员来说,这都是一个非常标准的情况.

感谢这个答案我知道使用救援处理的情况非常整齐,如下:

def show
  @customer = Customer.find(params[:id])
  rescue ActiveRecord::RecordNotFound #customer with that id cannot be found
    redirect_to action: :index        #redirect to index page takes place instead of crashing
end
Run Code Online (Sandbox Code Playgroud)

如果找不到客户,则用户被重定向到索引页面.这绝对没问题.

现在,这一切都很好,但我需要在show,edit,destroy等操作中进行相同的救援尝试,即每个需要特定id的控制器方法.

话虽如此,这是我的问题: 没有任何方法可以告诉我的控制器,如果它无法在任何方法中找到id,它将重定向到索引页面(或者,通常,执行特定的任务)?

Bal*_*ick 33

您必须使用rescue_from此任务.请参阅" 操作控制器概述指南"中的示例

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found

  private

  def record_not_found
    redirect_to action: :index
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 您还可以添加flash消息flash [:notice] ="找不到记录" (2认同)

Zac*_*emp 8

Rails有一个内置的rescue_from类方法:

class CustomersController < ApplicationController
  rescue_from ActiveRecord::RecordNotFound, with: :index
  ...
end
Run Code Online (Sandbox Code Playgroud)