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

如何直接通过URL路径访问Rails引擎的login路由?

解决No route matches [POST] "/login"的问题

首先咱们拆解下问题核心:你的MyEngine挂载在主应用的/engine路径下,引擎内定义的所有路由默认都会带上这个前缀。你直接访问/login找不到路由,是因为这条登录路由的实际路径应该是/engine/login。

下面给你两种解决方案,按需选择:

方案一:使用引擎挂载前缀访问(最简单直接)

你在主应用路由里配置了mount MyEngine::Engine => '/engine', as: 'engine',这意味着引擎的所有路由都会以/engine为前缀。你只需要把请求URL修改为:

POST http://localhost:3000/engine/login

就能正确访问到引擎的SessionsController#create方法了。

建议先运行rails routes命令查看实际生成的路由列表,确认这条登录路由的路径是否为/engine/login,这样能直观验证路由配置的正确性。

方案二:直接映射/login到引擎的登录方法(无需带/engine前缀)

如果你希望用户直接通过/login访问,不需要添加引擎前缀,可以在主应用的routes.rb里新增一条转发路由:

Rails.application.routes.draw do
  mount MyEngine::Engine => '/engine', as: 'engine'
  # 新增这条路由,将/login请求转发到引擎的登录方法
  post 'login', to: 'my_engine/sessions#create'
end

这里要注意,因为你注释了引擎的isolate_namespace MyEngine,引擎的控制器会暴露在主应用的命名空间下,所以用my_engine/sessions#create能正确指向引擎内的SessionsController。

补充说明:如果后续你恢复了isolate_namespace MyEngine的配置,控制器路径需要改成engine/sessions#create(对应挂载时设置的as: 'engine'别名),主应用的转发路由也要做相应调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:47:23