【发布时间】:2023-03-22 21:22:01
【问题描述】:
我需要有关 DRYing 视图代码的最佳做法的建议。 我的应用程序中有三个类(NewsItem、RssItem 和 BlogItem),它们使用单独的视图,但其中有相似的部分。其中一个部分是这样的:
<% if current_user %>
<footer>
<%= marks_bar(@item) %>
<%= favorite_button(@item, "blog_item") || delete_from_favorite_button(@item, "blog_item") %>
<%= share_button(@item) %>
<% if current_user.is_mine?(@item) %>
<div><%= link_to "Edit", edit_user_blog_item_path(current_user, @item) %></div>
<% end %>
</footer>
<% end %>
这三个班级几乎相等,所以我决定把它带到另一个地方。在这里我很困惑:我应该使用部分方法还是辅助方法? 我知道帮助器主要用于将 ruby 代码与 HTML 分开,但在这种情况下,帮助器看起来像:
def toolbar_for(item, type_str, edit_path)
if current_user
content_tag(:footer) do |b|
marks_bar(item).to_s <<
(delete_from_favorite_button(item, type_str) || favorite_button(@item, type_str)).to_s <<
share_button(@item).to_s <<
(content_tag(:div) { link_to("Edit", edit_path)} if current_user.is_mine?(@item)).to_s
end
end
end
所以,这里几乎没有 HTML 代码。
您能否给我建议,您认为哪种方法更好,为什么?此外,这些方法是否存在一些性能问题(例如多个字符串连接或频繁的部分加载可能代价高昂)? (这个应用程序是相当高负载的)
【问题讨论】:
标签: ruby-on-rails view refactoring dry