1. add test to test the new users/show view:
describe UsersController do
render_views
.
describe "GET 'show'" do
before(:each) do
@user = Factory(:user)
end
. .
it "should show the user's microposts" do
mp1 = Factory(:micropost, :user => @user, :content => "Foo bar")
mp2 = Factory(:micropost, :user => @user, :content => "Baz quux")
get :show, :id => @user
response.should have_selector("span.content", :content => mp1.content)
response.should have_selector("span.content", :content => mp2.content)
end
end
.
end
2. then work on the show page:
<table class="profile">
<tr>
<td class="main">
.
.
.
<% unless @user.microposts.empty? %>
<table class="microposts" summary="User microposts">
<%= render @microposts %>
</table>
<%= will_paginate @microposts %>
<% end %>
</td>
<td class="sidebar round">
<strong>Name</strong> <%= @user.name %><br />
<strong>URL</strong> <%= link_to user_path(@user), @user %><br />
<strong>Microposts</strong> <%= @user.microposts.count %>
</td>
</tr>
</table>
note, we add a argument to will_paginate method.
because we are in users controller, so if the argument is @users, it can be omitted.
but this time, the argument is @microposts, so we need to specify it clearly.
3. then we need to add a _micropost.html.erb partial to views/microposts dir.
<tr>
<td class="micropost">
<span class="content"><%= micropost.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %> ago.
</span>
</tr>
5. we still need to add
@microposts = @user.microposts.paginate(:page => params[:page])
this will return a WillPaginate::Collection......
6. then we need to add some sample data to see the effect of our working.
50.times do
User.all(:limit => 6).each do |user|
user.microposts.create!(:content => Faker::Lorem.sentence(5))
end
end