添加标签/类别到循环微博

时间:2014-10-08 23:42:20

标签: ruby-on-rails ruby

我正在关注Hartl的截屏视频,我们正在迭代微博并在视图中显示它们:

<div class="span8">
  <% if @user.microposts.any? %>
    <h3>Microposts (<%= @user.microposts.count %>)</h3>
    <ol class="microposts">
      <%= render @microposts %>
    </ol>
    <%= will_paginate @microposts %>
  <% end %>
  </div>
</div>

但是我想标记每个微博(Micropost 1,Micropost 2等......)。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

<%= render @microposts %>呈现部分 app / views / microposts / _micropost.html.erb 。所以它只是一个编辑该文件的情况。

在本教程中,我相信 micropost.html.erb 文件如下所示:

<tr>
  <td class="micropost">
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
      Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
  </td>
</tr>

要添加标签,您可以执行以下操作:

<tr>
  <td class="micropost">
    <span class="label"><%= "Micropost #{micropost.id}" %><span>
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
      Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
  </td>
</tr>

这将在每个微博内容上方添加“Micropost 1”,“Micropost 2”等文本

修改

如果您不想使用ID并且只想要顺序编号,那么您可以更改代码以迭代每个微博并单独渲染它们,传递计数:

<% @microposts.all.each_with_index do |micropost, index| %>
  <%= render micropost, locals: {index: index} %>
<% end %>

然后在您的部分中,您可以使用局部变量index

<tr>
  <td class="micropost">
    <span class="label"><%= "Micropost #{index}" %><span>
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
      Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
  </td>
</tr>