如何与助手中的集合进行交互,但仅返回特定输出而不是整个集合?

时间:2015-05-20 22:12:05

标签: ruby-on-rails ruby-on-rails-4 helpers

在我看来,我有这个:

<% node.tagged_users.each do |tagged_user| %>
   <li><%= display_avatar_or_email(tagged_user) %></li>
<% end -%>

但是,我想要做的是创建一个帮助方法,每当有5 tagged_users时,它会显示最后3个的头像,然后在文本上显示一个链接&#34; 2更&#34;或&#34; 2 +&#34; (根据下图)。请注意,它不应显示标记的用户总数,只是显示当前显示为头像的已标记用户数与此特定节点的已标记用户总数之间的差异。

所以它看起来像这样:

enter image description here

不确定是否重要,但display_avatar_or_email(tagged_user)的方法如下:

  def display_avatar_or_email(user)
    link_to image_tag(user.avatar.url, size: "48x48", :class => "img-circle", title: user_name_or_email(user)), user
  end

我有tagged_users.count的方法:

  def total_tagged_users_count(node)
    node.user_tags.count
  end

当我将整个node.tagged_users.each do |tagged_user|移动到我的帮助器中时,它在我的视图中吐出整个AR集合 - 这不是我想要的。我只想要逻辑的结果,而不是方法中的所有内容。

使用Rails方式在帮助程序中执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

如果你想让佣人吐出html,请使用content_tag或将原始html写为字符串。我有点像content_tag。

def some_helper node
  node.tagged_users.first(3).each do |tagged_user|
    content_tag(:li, display_avatar_or_email(tagged_user))
  end
  content_tag(:li, (node.tagged_users.count - 3))
end

答案 1 :(得分:0)

而不是在您创建的助手中使用.each,而不是使用.map?然后隐式返回将是结果,而不是整个集合中的每个循环。