You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中admin_path需传current_user.id的原因及跳转index的解决方法

报错原因

你当前的路由配置用了Rails默认的resources :admin,这套RESTful路由规则下:

  • 指向控制器index动作的路由辅助方法为复数形式的admins_path,对应路径/admins,无需传参
  • 你调用的admin_path是单数形式,默认指向show动作,对应路径/admins/:id,要求必须传入id参数
    你调用admin_path时不传id,Rails就会自动匹配show动作的路由,进而触发缺少必填id参数的报错。
调整方案

推荐优先用以下第一种方案,更符合后台单例资源的使用场景:

方案1:直接指定路由映射(推荐)

修改routes.rb中的配置,删掉原有的resources :admin,替换为如下代码:

get 'admin', to: 'admin#index', as: :admin

修改完成后,admin_path就会直接指向Admin控制器的index动作,无需传任何参数,导航栏代码可以直接改成:

<%= link_to 'Dashboard', admin_path, class: "nav-link" %>

方案2:保留resources配置的修改方式

如果要保留resources写法,需要指定对应控制器避免路由匹配到默认的复数控制器,修改routes.rb如下:

resources :admin, controller: 'admin'

此时导航栏直接调用index动作对应的复数路由辅助方法即可,无需传参:

<%= link_to 'Dashboard', admins_path, class: "nav-link" %>
额外优化建议

你当前Admin控制器的权限校验方法存在冗余代码,且flash提示放在重定向之后会导致提示不生效,可以调整为如下写法:

def authenticate_user_as_admin
  authenticate_user!
  unless current_user.admin?
    flash[:alert] = "抱歉 #{current_user.first_name} #{current_user.last_name},你没有权限访问该页面"
    redirect_to root_path
  end
end

内容的提问来源于stack exchange,提问作者kbob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:03