ruby-on-rails – DRYing rails视图:partial vs helper

栏目: Ruby · 发布时间: 7年前

内容简介:我会说这是一个很好的例子.我预留助手来生成任意动态内容.这是一个松散的描述,所以一个例子如何:我会做一个帮助器,分割一个ActiveRecord对象数组,并将它们显示为N列.在这种情况下,传递的对象的结构以某种方式被利用,以便生成内容,但内容本身并不重要.如果你想到,form_for也适合这个描述.相反,部分内容对于“静态”内容是非常好的,需要在多个页面上重复使用.例如,您将创建一个部分来渲染单个项目.部分确定特定项目的“静态”表示.

参见英文答案 > When to use Helpers instead of Partials 6

我需要关于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代码.

你能给我建议,你认为什么方法更好,为什么?此外,这些方法中是否存在一些性能问题(例如,多个字符串连接或频繁的部分加载可能是昂贵的)? (这个程序相当高负载)

我会说这是一个很好的例子.

我预留助手来生成任意动态内容.这是一个松散的描述,所以一个例子如何:我会做一个帮助器,分割一个ActiveRecord对象数组,并将它们显示为N列.在这种情况下,传递的对象的结构以某种方式被利用,以便生成内容,但内容本身并不重要.如果你想到,form_for也适合这个描述.

相反,部分内容对于“静态”内容是非常好的,需要在多个页面上重复使用.例如,您将创建一个部分来渲染单个项目.部分确定特定项目的“静态”表示.

在我看来,你的例子更适合第二个垃圾桶.由于@item没有被操纵以生成内容,实际上它几乎不被使用.似乎这个帮手大多是其他适当创建的助手的粘贴代码(share_button和marks_bar).完美的用例为部分!

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/6848393/drying-rails-view-partial-vs-helper


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First HTML5 Programming

Head First HTML5 Programming

Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99

What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具