共享部分删除链接路由到主应用和引擎

时间:2017-01-18 23:19:29

标签: ruby-on-rails rails-routing rails-engines

我最近开始使用引擎分解我的一些应用程序 我遇到了一些与我正在使用的共享部分中的某些链接路由的问题。部分看起来像这样:

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

这适用于仍然在主应用程序中的模型/路线,但现在我有这样的情况:

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

部分由主app中的控制器呈现,其中包含引擎中路由的删除链接。唯一重要的事情(我认为)是控制器位于主应用程序中,对象的路径位于已安装的引擎中,因此需要命名空间。

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

1 个答案:

答案 0 :(得分:0)

重构时不要过度。

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

function destroyer(arr) {
    // Remove all the values
    for(var i=0;i<arguments.length;i++) {
           arr = arr.filter( x => x !== arguments[i]);     
    }  
    console.log(arr);
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return

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

要在rails中创建指向命名空间路径的链接,请传递数组:

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