共享部分删除 link 到主要应用程序和引擎的路由

shared partial delete link routing to main app and engines

我最近开始使用引擎分解我的一些应用程序 我 运行 在我使用的共享部分中遇到一些 link 的路由问题。部分内容如下所示:

shared/delete_link.html.erb

<%= link_to object, 
            method: :delete, 
            data: { confirm: 'Are you sure?' } do%>
            <span class="glyphicon glyphicon-remove"></span>
<% end %>

我这样调用部分;将我要删除的对象传递给它:

<%= render "shared/delete_link", :object => search %>

这适用于仍在主应用程序中的 models/routes,但现在我遇到了这样的情况:

|-controller(main-app)
|--show(main-app)
|---partial(engine)
|----partial-delete-link(main-app)
|-----link-route(engine)

部分由主应用程序中的控制器呈现,并删除了引擎中的路线 link。唯一重要的(我认为)是控制器在主应用程序中,对象的路由在已安装的引擎中,因此需要命名空间。

如何在不将大量逻辑放入我的视图的情况下恢复功能?

重构时不要过度。

使用局部创建单个元素几乎不是最佳选择。相反,您可以只创建一个辅助方法:

module LinksHelper
  def link_to_destoy(object, **kwargs)
     opts = { 
       method: :delete, 
       data: { confirm: 'Are you sure?' } 
     }.deep_merge(kwargs)
     link_to object, opts do
       content_tag :span, class: 'glyphicon glyphicon-remove'
     end
  end
end 

通过使用一种方法,您可以轻松地创建一个包装器来代理另一个方法,同时填充默认参数。在比较中,部分适用于大块 html 但在变量传递和组合方面仍然很混乱。

要创建 link 到 rails 中的命名空间路径,您需要传递一个数组:

# /foos/bars/:id
<%= link_to_destoy([:foo, bar]) %>

# /foos/:foo_id/bars/:id
<%= link_to_destoy([foo, bar]) %>