小编Paw*_*Wal的帖子

删除主应用程序中路径助手中对 main_app 前缀的需要

我有一个独立的、可安装的 Rails 引擎,它将自身安装在主机应用程序中已声明的命名空间中。它或多或少看起来是这样的:

插件中的routes.rb:

# my_engine/config/routes.rb 
MyEngine::Engine.routes.draw do
  namespace :admin do
    resources :some_resource
  end
end
Run Code Online (Sandbox Code Playgroud)

以及主机应用程序的routes.rb中的适当片段:

# config/routes.rb
mount MyEngine::Engine, at: "/"

namespace :admin do
  resources :host_resource
end
Run Code Online (Sandbox Code Playgroud)

我正在安装引擎,/因为引擎中应该有一些可用的路由,并且管理命名空间重叠是有意的。

这些路线会生成几个路径助手,包括my_engine.admin_some_resources_path和 我期望的admin_host_resources_path. 后者是行不通的。

假设主应用程序中有一个控制器声明如下:

# app/controllers/admin/application_controller.rb
class Admin::ApplicationController < ApplicationController
  layout 'admin'
end
Run Code Online (Sandbox Code Playgroud)

并且引擎的 AdminController 的声明方式是继承它:

# my_engine/app/controlles/admin/application_controller.rb
class MyEngine::Admin::ApplicationController < Admin::ApplicationController
end
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都按预期进行。现在,假设在主应用程序的admin布局中,从 Admin::ApplicationController 引用,我尝试使用本质上类似的东西:

# app/views/layouts/admin.html.erb
<%= link_to "Host resources", admin_host_resources_path %>
<%= link_to "Plugin's resources", my_engine.admin_some_resources_path %>
Run Code Online (Sandbox Code Playgroud)

当我加载像“/admin/host_resources”这样的路径时,这工作得很好 - 它从主应用程序渲染管理布局没有问题。当打开路径“/admin/some_resources”(进入插件)时,它会停止工作,抱怨 …

rails-engines ruby-on-rails-4

4
推荐指数
1
解决办法
2525
查看次数

标签 统计

rails-engines ×1

ruby-on-rails-4 ×1