我正在使用以下代码向我的用户显示帖子。
_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;
答案 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>