我正在关注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等......)。我怎么能这样做?
答案 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>