在我看来,我有这个:
<% 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; (根据下图)。请注意,它不应显示标记的用户总数,只是显示当前显示为头像的已标记用户数与此特定节点的已标记用户总数之间的差异。
所以它看起来像这样:
不确定是否重要,但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方式在帮助程序中执行此操作的最佳方法是什么?
答案 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
?然后隐式返回将是结果,而不是整个集合中的每个循环。