gpt4 book ai didi

ruby-on-rails-4 - 在主应用程序的路径助手中删除对 main_app 前缀的需要

转载 作者:行者123 更新时间:2023-12-04 07:20:04 25 4
gpt4 key购买 nike

我有一个隔离的、可挂载的 rails 引擎,它将自己挂载在主机应用程序中已声明的命名空间中。以下是它或多或少的样子:

插件中的routes.rb:

# my_engine/config/routes.rb 
MyEngine::Engine.routes.draw do
namespace :admin do
resources :some_resource
end
end

以及来自宿主应用的 routes.rb 的适当片段:

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

namespace :admin do
resources :host_resource
end

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

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

假设在主应用程序中有一个这样声明的 Controller :

# app/controllers/admin/application_controller.rb
class Admin::ApplicationController < ApplicationController
layout 'admin'
end

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

# my_engine/app/controlles/admin/application_controller.rb
class MyEngine::Admin::ApplicationController < Admin::ApplicationController
end

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

# 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 %>

当我加载像“/admin/host_resources”这样的路径时,这可以正常工作 - 它从主应用程序呈现管理布局没有问题。当打开路径 '/admin/some_resources' - 它进入插件 - 它停止工作并提示 admin_host_resources_path 没有找到。当我将其更改为以下内容时它开始工作:

# app/views/layouts/admin.html.erb
<%= link_to "Host resources", main_app.admin_host_resources_path %>
<%= link_to "Plugin's resources", my_engine.admin_some_resources_path %>

这不是我想要的,也不是我期望的。此外,我已经看到了足够多的 rails 插件,知道这不是必需的,但是在阅读了 Engines 文档后,我仍然不知所措。我也搜索了堆栈,但无济于事。我的问题是:如何包含 main_app 助手以便不再需要前缀 main_app

值得注意的是,host_resource 的 View 位于主应用程序本身中,而 some_resource 的 View 位于引擎中。不过这不重要,因为不起作用的 View 是主应用程序中的 admin 布局。

还请原谅高度匿名的代码,但这是我的要求。

最佳答案

在你的 Controller 中添加这个:

helper Rails.application.routes.url_helpers

关于ruby-on-rails-4 - 在主应用程序的路径助手中删除对 main_app 前缀的需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com