【问题标题】:Access rails engine routes directly from URL path直接从 URL 路径访问 rails 引擎路由
【发布时间】:2018-03-23 09:38:13
【问题描述】:

我正在尝试访问

POST http://localhost:3000/login

MyEngine 路线

devise_for :accounts, { class_name: 'MyEngine::Account', skip: [:sessions, :registration, :password] }
    as :account do
     post 'login', to: 'sessions#create'
    end

我的申请途径

Rails.application.routes.draw do
  mount MyEngine::Engine => '/engine', as: 'engine'
end

注释隔离空间

module MyEngine
  class Engine < ::Rails::Engine
    #isolate_namespace MyEngine
  end
end

点击 POST http://localhost:3000/login 后出错

#<ActionController::RoutingError: No route matches [POST] \"/login\">

如何直接从URL路径访问Engine的登录方式?

【问题讨论】:

  • 你能把你的整个routes.rb文件贴出来吗?
  • 是这样的网址/engine/login 吗?根据您的主要 route.rb 您的网址应该是这个
  • 是的,/engine/login 它进入了会话控制器。但现在我开始 POST "/abc_services_core/login" for 127.0.0.1 at 2018-03-23 15:22:37 +0530 ActionController::RoutingError (uninitialized constant SessionsController):
  • 会话控制器在引擎类 MyEngine::SessionsController 中是这样的

标签: ruby-on-rails ruby devise rails-engines


【解决方案1】:

未初始化常量 SessionsController 发生错误是因为 rails 无法找到您的会话控制器,因此如果您要覆盖默认设计,请在路由中指定自定义控制器路径。

引擎路线

devise_for :accounts, { class_name: 'MyEngine::Account', skip: [:sessions, :registration, :password], controllers: { sessions: "my_engine/sessions"} } as :account do
 post 'login', to: 'sessions#create'
end

controllers: { sessions: "my_engine/sessions"} 在这里你可以看到我已经指定了会话路径。

config/routes.rb

Rails.application.routes.draw do
  # your main routes 
  mount MyEngine::Engine => '/engine', as: 'engine'
end

您的会话控制器如下:

  MyEngine::SessionsController < Devise::SessionsController
  end

【讨论】:

  • 谢谢 Vishal,我的问题通过在路由中添加引擎名称空间解决了。将“登录”发布到:“my_engine/sessions#create”,如:“登录”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
相关资源
最近更新 更多