Activeadmin:未定义的方法`access_denied'

时间:2017-11-09 13:12:23

标签: ruby-on-rails devise activeadmin cancan

我使用rails 5.0 康康1.6.10 设计4.2.0 Activeadmin

我经常在newrelic中出现这个错误:

NoMethodError: undefined method `access_denied' for #<Admin::FollowupsController:0x007f112917d270>

在active_admin.rb中,我在config:

中设置:access_denied
  config.on_unauthorized_access = :access_denied

如何删除此错误并对access_denied而不是500进行良好的重定向管理?

2 个答案:

答案 0 :(得分:4)

由于您已将ActiveAdmin配置为使用:access_denied方法进行未经授权的访问,因此您需要在application_controller.rb中定义此方法,并将用户从他们无权访问的页面重定向访问他们有权访问的资源。您还可以在浏览器中显示错误消息。一个典型的例子:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def access_denied(exception)
    redirect_to admin_root_path, alert: exception.message
  end
end

重定向到主页的HTML请求并返回403 Forbidden for JSON请求的示例:

def access_denied(exception)
  respond_to do |format|
    format.json { head :forbidden, content_type: 'text/html' }
    format.html { redirect_to main_app.root_url, notice: exception.message }
  end
end

如果您希望返回403 Forbidden HTTP代码,请创建一个public/403.html文件并将其渲染为:

def access_denied(exception)
  render file: Rails.root.join('public', '403.html'), 
         status: 403, 
         layout: false
end

答案 1 :(得分:0)

正如Wasif所描述的那样解释here in the documentation