(Ruby on Rails)将帖子显示为3组

时间:2017-05-15 03:44:10

标签: ruby-on-rails

我正在使用以下代码向我的用户显示帖子。

_feed.html.erb partial:

<% @posts_by_month.each do |monthname, posts| %>
<%= monthname %>
<ul>
   <% posts.each do |post| %>
     <li><%= post.created_at %></li>
   <% end %>
</ul>
<% end %>

控制器:

  def home
    if logged_in?
      @post  = current_user.posts.build
      @posts_by_month = current_user.feed.group_by { |post| post.created_at.strftime("%B") }

这使我的帖子呈现如下:

Post 1
Post 2
Post 3
Post 4

我想更改它,以便帖子显示如下:

Post 1         Post 2       Post 3
Post 4         etc          etc
etc

我已经尝试了几种方法,包括in_groups_of(3)方法,但是它当前设置的方式意味着什么都不起作用。我觉得有一个明显的解决方案我不知道 - 有人可以帮忙吗?

[编辑以扩展in_groups_of(3)错误]

如果我将_feed partial中的第4行更改为:

<% posts.in_groups_of(3, false).each do |post| %>

它给出了错误:未定义的方法`created_at'用于#&lt;数组:0xbb8f258&gt;

2 个答案:

答案 0 :(得分:2)

#in_groups_of方法返回一个数组Array,每个数组包含3个Post对象。 因此,您现在还需要迭代包含三个帖子的返回数组,例如:

<% posts.in_groups_of(3, false).each do |post_group| %>
   <% post_group.each do |post| %>
     <li><%= post.created_at %></li>
   <% end %>
<% end %>

答案 1 :(得分:0)

您可以使用facets gem。这提供了each_by方法。您可以使用each_by创建组并在这些组上进一步迭代。

以下是有关如何使用each_by

的代码段
<div class = "small-9 columns vertical-border-left">
    <%- @client.contact_details.each_by(3) do |contact_details| %>
      <div class="row">
        <%- contact_details.each do |contact| %>
            <div class="small-3 columns small">
              <div> <%= contact.contact_detail_type %> contact </div>
              <div> <%= contact.contact_email %> </div>
              <div> <%= contact.contact_phone %> </div>
            </div>
        <% end %>
      </div>
    <% end %> 
</div>