Ruby on rails (Ruby on Rails)将帖子分成3组显示
我使用以下代码向我的用户显示帖子 _feed.html.erb部分:Ruby on rails (Ruby on Rails)将帖子分成3组显示,ruby-on-rails,Ruby On Rails,我使用以下代码向我的用户显示帖子 _feed.html.erb部分: <% @posts_by_month.each do |monthname, posts| %> <%= monthname %> <ul> <% posts.each do |post| %> <li><%= post.created_at %></li> <% end %> </ul> <
<% @posts_by_month.each do |monthname, posts| %>
<%= monthname %>
<ul>
<% posts.each do |post| %>
<li><%= post.created_at %></li>
<% end %>
</ul>
<% end %>
这使得我的帖子如下:
Post 1
Post 2
Post 3
Post 4
我想更改它,使帖子显示为:
Post 1 Post 2 Post 3
Post 4 etc etc
etc
我已经尝试了几种方法,包括in_groups_of(3)方法,但是当前的设置方式意味着没有任何效果。我觉得有一个明显的解决办法我错过了-有人能帮我吗
[编辑以展开(3)个错误的组内错误]
如果我将_feed部分中的第4行更改为:
<% posts.in_groups_of(3, false).each do |post| %>
它给出了错误:未定义的方法'created_at'for#方法的#in_groups_of
返回一个数组,每个数组包含3个Post对象。
因此,您现在还需要迭代包含三篇文章的返回数组,如:
<% posts.in_groups_of(3, false).each do |post_group| %>
<% post_group.each do |post| %>
<li><%= post.created_at %></li>
<% end %>
<% end %>
您可以使用gem。这通过
方法提供和每个_。您可以使用each_by
创建组并进一步迭代这些组
下面是关于如何使用每个\u的代码片段
<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>
接触
您好,谢谢您的回答。然而,当我将上述代码插入到feed部分时,逻辑是有意义的,每个帖子仍然显示在自己的行上,而不是我希望的每行3个。您知道为什么会发生这种情况吗?之所以会发生这种情况,是因为您正在使用默认情况下始终垂直的和- 标记来解决需要修改html/css的问题。谢谢!关于如何修改html/css以获得我想要的行为,您有什么建议吗?或者使用
和- 标记的替代方法?我建议看一下使用flexbox:这是一些flexbox basic的链接,许多现代CSS框架将其用于列类等。因此我认为这是一个很好的方法。
<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>