共享部分删除 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]) %>
我最近开始使用引擎分解我的一些应用程序 我 运行 在我使用的共享部分中遇到一些 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]) %>