其他通过Chapter 11 Exercises for Michael Hartl's Rails Tutorial 2nd Edition工作的人吗?
第11章,练习3问: 通过为以下/关注者页面,主页和用户显示页面共同的代码添加部分来重构清单11.31。
我在主页,用户显示页面或show_follow页面中看不到任何值得重构的内容
如果有人想出一些值得参加这项运动的事情,我很乐意知道。
谢谢!
答案 0 :(得分:2)
您可以重构清单11.31中的第一个代码块:
<section>
<%= gravatar_for @user %>
<h1><%= @user.name %></h1>
<span><%= link_to "view my profile", @user %></span>
<span><b>Microposts:</b> <%= @user.microposts.count %></span>
</section>
因为它与在主页上使用的views \ shared_user_info.html.erb部分基本相同(代码清单10.32)。因此,您可以使用以下代码替换上面的代码块:
<%= render 'shared/user_info' %>
请注意,您还需要将<% @user ||= current_user %>
添加到views \ shared_user_info.html.erb partial的顶部(这与添加到清单11.20中的stats partial所需的内容相同)。
此外,feed_item + feed部分与用户+ micropost部分之间存在一些重复(尽管不是完全重复),其中取决于正在显示的页面(follow_show,home或profile),有一个或多个元素被列出(名称,重力,管理删除链接,微博内容,微博时间戳和微博删除链接)。这些也可能被重构,以消除feed_item + feed部分,并根据页面将用户+微博部分组合替换它们。
答案 1 :(得分:0)
我刚刚完成了这个练习,找到了一个有效的解决方案。
首先我更改app / views / shared / _user_info.html.erb以使用@user变量(如果已设置)和current_user变量。
应用程序/视图/共享/ _user_info.html.erb:
<% if @user %>
<%= link_to gravatar_for(@user, size: 52), @user %>
<h1>
<%= @user.name %>
</h1>
<span>
<%= link_to "view my profile", @user %>
</span>
<span>
<%= pluralize(@user.microposts.count, "micropost") %>
</span>
<% else %>
<%= link_to gravatar_for(current_user, size: 52), current_user %>
<h1>
<%= current_user.name %>
</h1>
<span>
<%= link_to "view my profile", current_user %>
</span>
<span>
<%= pluralize(current_user.microposts.count, "micropost") %>
</span>
<% end %>
然后我将app / views / users / show_follow.hmtl.erb中的相应信息替换为部分_user_info.html.erb
应用程序/视图/用户/ show_follow.hmtl.erb:
<div class="row">
<aside class="span4">
<section>
<%= render 'shared/user_info' %>
</section>
<section>
<%= render 'shared/stats' %>
<% if @users.any? %>
<div class="user_avatars">
<% @users.each do |user| %>
<%= link_to gravatar_for(user, size: 30), user %>
<% end %>
</div>
<% end %>
</section>
</aside>
<div class="span8">
<h3><%= @title %></h3>
<% if @users.any? %>
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
<% end %>
</div>
</div>
我希望这个答案可以帮助任何人通过M. Hartl的教程。