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

Rails Devise Gem路由异常求助:添加Bootstrap后路由失效

解决Devise + Bootstrap后的路由问题

看来你遇到了两个典型的Devise配置问题,我来逐个帮你排查解决:

问题1:Sign Out时报错"No route matches [GET] "/users/sign_out""

这个问题的核心是Devise默认把sign_out路由设置为DELETE请求,但你的视图里的Sign Out链接可能发送了GET请求,导致匹配不到正确的路由。

解决步骤:

  1. 修正Sign Out链接的写法:
    不要直接写纯HTML的<a>标签,改用Rails的link_to helper并明确指定method: :delete,比如在Bootstrap导航栏里写:

    <%= link_to "退出登录", destroy_user_session_path, method: :delete, class: "nav-link" %>
    

    (如果是Admin的退出链接,就用destroy_admin_session_path)

  2. 确保Rails UJS已加载:
    非GET方法的链接需要Rails UJS的支持才能正常工作。检查你的app/assets/javascripts/application.js(Rails 5及更早)里是否包含:

    //= require rails-ujs
    

    如果是Rails 6+用Webpack的话,在app/javascript/packs/application.js里加上:

    import Rails from "@rails/ujs"
    Rails.start()
    

问题2:访问/admins/sign_up时触发UrlGenerationError

这个问题的根源在你的routes.rb和AdminRegistrationsController的配置错误:

首先修正路由配置:

看你的routes.rb里的这行:

devise_for :admins, :controllers => { admin_registrations: 'admin registrations' }

这里有两个错误:

  • Devise的控制器选项键应该是Devise内置的控制器名(比如:registrations),而不是自定义的名称
  • 控制器路径里的空格是错误的,Rails会找不到对应的控制器文件(你的控制器是AdminRegistrationsController,对应的路径是admin_registrations)

修正后的路由应该是:

devise_for :admins, controllers: { registrations: 'admin_registrations' }

然后修正AdminRegistrationsController的参数:

你的控制器里写的是params.require(:user),但你操作的是Admin模型,注册时提交的参数是:admin而不是:user,这会导致参数不允许或者报错。修改成:

class AdminRegistrationsController < Devise::RegistrationsController
  private
  def sign_up_params
    params.require(:admin).permit(:first_name, :last_name, :username, :hometown, :email, :password, :password_confirmation)
  end
  def account_update_params
    params.require(:admin).permit(:first_name, :last_name, :username, :hometown, :email, :password, :password_confirmation, :current_password)
  end
end

最后检查导航栏链接:

报错提示找不到devise/posts的路由,大概率是导航栏里某个Devise相关的链接写错了scope。比如Admin的注册链接应该用new_admin_registration_path,而不是用户的new_user_registration_path,确保所有Admin的Devise链接都用正确的helper路径。

做完这些修改后,重启Rails服务器,应该就能解决这两个问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:50