![](/img/trans.png)
[英]Rails: make custom URL helper behave like built in _path & _url helpers
[英]Rails URL and Path Helpers in Engines Like Spree
我正在尝试在Rails 4 Engine视图中使用一些URL和/或路径帮助程序,例如resource_url或resource_path。 这些引擎的配置与那里的典型--mountable教程略有不同。 实际上,它们没有Spree :: ENGINE_NAME命名空间,更类似于Spree的操作方式。
像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
,但是没有提及实际上是在核心引擎上绘制的。
有任何想法吗?
我们通过使用add_routes
绘制核心引擎上的所有路由来解决这个add_routes
,存在这个原因是因为它很长的切线,所以我不add_routes
在这里讨论。 但是,这种工作必不可少。
Core::Engine
的isolate_namespace
方法将所有内容都isolate_namespace
为spree
名称空间。 如果您位于在Spree::Core::Engine
路线下绘制的控制器内,并且要引用也在该路线下绘制的另一个控制器的路线,则可以不使用该spree.
路由助手上的前缀。
如果要路由到其他引擎,则需要具有前缀: main_app.
管他呢。
《 引擎指南》对此进行了更详细的解释,我建议您阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.