ActiveAdmin 设置 config.logout_link_path 导致未定义的方法错误

ActiveAdmin setting config.logout_link_path cause undefined method error

我正在使用 ActiveAdmin gem。我想为菜单添加注销 link。所以在 ActiveAdmin 的配置文件中我写道:

config.logout_link_path = :destroy_admin_user_session_path

然后在我的 application_controller.rb 中添加一个方法:

  def destroy_admin_user_session_path
    session[:current_admin] = nil
    return "/"
  end

然后回到 ActiveAdmin 配置,我添加菜单项:

  config.namespace :admin do |admin|
    admin.build_menu :defaut do |menu|
      admin.add_logout_button_to_menu menu, html_options: {target: :blank}
    end
  end

然后启动我的应用程序,但是当我访问管理页面时出现内部错误:

undefined method `destroy_admin_user_session_path' for "        <ul class=\"header-item tabs\" id=\"utility_nav\"></ul>\n":ActiveAdmin::Views::TabbedNavigation

似乎符号 :destroy_admin_user_session_path 没有发送到我的 ApplicationController,而是显示为 <ul class=\"header-item tabs\" id=\"utility_nav\"></ul>\n

为什么会发生这种情况以及如何解决?

怀疑(没有足够的代码可以说明)您想要的是 view 助手,而不是控制器方法。这将允许您在您的视图中使用该方法,这可能是 HTML 它报告为错误源的地方。

将您的 destroy_admin_user_session_path 方法移至 app/helpers/application_helper.rb 并重试。

如果你真的想把你的方法保留在控制器中,你可以选择在 ApplicationController class 的顶部添加 helper_method :destroy_admin_user_session_path,这会将方法变成辅助方法跨控制器和视图可用。