我正在尝试在我的Rails 4引擎视图中使用一些URL和/或路径助手,例如resource_url或resource_path。这些引擎的配置与典型的可安装教程略有不同。事实上,它们更像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
在我的后端引擎中的视图中,我希望能够使用一些URL /路径助手来执行以下操作:
<%= link_to manage_path, manage_path %>
这不起作用,因为我在核心引擎上绘制路线。所以,我必须使用
<%= link_to core_engine.manage_path, core_engine.manage_path %>
狂欢以某种方式绕过这个,但我不确定如何。例如,在backend/app/views/spree/admin/products/index.html.erb
中:
<%= link_to product.try(:name), edit_admin_product_path(product) %>
注意,edit_admin_product_path
,但实际上没有提及核心引擎。
有什么想法吗?
答案 0 :(得分:6)
我们通过使用add_routes
绘制核心引擎上的所有路径来解决这个问题,因为它不是因为它是一个很长的切线而不会进入这里。但是,这种工作是必要的邪恶。
isolate_namespace
中的Core::Engine
方法将所有内容范围限定为spree
命名空间。如果您在Spree::Core::Engine
路线下方绘制的控制器内,并且您想引用另一个也在该路线下绘制的控制器的路线,那么您可以不使用spree.
路由助手上的前缀。
如果您要路由到其他引擎,则需要使用前缀:main_app.
或其他任何内容。
Engines Guide更详细地解释了这一点,我建议您阅读。