gpt4 book ai didi

ruby-on-rails - 像 Spree 这样的引擎中的 Rails URL 和路径助手

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

我正在尝试在我的 Rails 4 引擎 View 中使用一些 URL 和/或路径助手,例如 resource_url 或 resource_path。这些引擎的配置与典型的 --mountable 教程略有不同。事实上,它们更类似于 Spree 的工作方式,没有 Spree::ENGINE_NAME 命名空间。

与 Spree 的架构一样,我正在尝试创建我的其他引擎所依赖的核心 引擎。例如,我的后端 引擎的routes.rb 文件如下所示:

Core::Engine.add_routes do

# Check to see if the request comes in on a subdomain
# The Subdomains class passed into constraints()
# is a class defined in lib/subdomain.rb
constraints(Subdomain) do
match '/manage' => "manage#index", :via => [:get]
end

end

在我的后端 引擎中的一个 View 中,我希望能够使用一些 URL/路径助手来执行如下操作:

<%= link_to manage_path, manage_path %>

这不起作用,因为我在核心 引擎上绘制路线。所以,我必须使用

<%= link_to core_engine.manage_path, core_engine.manage_path %>

Spree 以某种方式解决了这个问题,但我不确定如何解决。例如,在 backend/app/views/spree/admin/products/index.html.erb 中:

<%= link_to product.try(:name), edit_admin_product_path(product) %>

请注意,edit_admin_product_path,但没有提及它实际上是在核心引擎上绘制的。

有什么想法吗?

最佳答案

我们通过使用 add_routes 在核心引擎上绘制所有路线来解决这个问题,它存在的原因我不会在这里讨论,因为它是一个很长的切线。不过,对于这种工作来说,这是必要的邪恶。

Core::Engine 中的isolate_namespace 方法将所有内容都限定在spree 命名空间中。如果您在绘制在 Spree::Core::Engine 路由下方的 Controller 内,并且您想要为也在该路由下方绘制的另一个 Controller 引用路由,那么您可以离开 spree. 路由助手的前缀。

如果你要路由到不同的引擎,那么你需要有前缀:main_app. 或其他。

Engines Guide对此进行了更详细的解释,我建议您阅读。

关于ruby-on-rails - 像 Spree 这样的引擎中的 Rails URL 和路径助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973646/

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