2012-04-20 133 views
4

任何人通过Chapter 11 Exercises for Michael Hartl's Rails Tutorial 2nd Edition工作?重构 - 第11章,练习3 Rails的教程第2版

第11章练习3问: 重构列表11.31通过为以下/关注者页面,主页面和用户显示页面添加通用代码的部分内容。

,我没有看到任何值得重构的网页,用户展示页面,或show_follow页面

如果有人想出了一些有意义的事情为这项工作,很想知道。

谢谢!

+0

我找不到公共代码要么在这些网页重构。也许这个问题是从先前版本的教程中得到的,其中没有那么多的重构代码(?)。如果你正在寻找方法,以使代码更紧凑,我可以建议使用Haml的重新写你的观点,也许走的是静态内容从家庭,接触,了解和帮助页面,并且把它们放在降价文件你可以渲染。 – 2012-06-24 14:10:02

回答

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> 

,因为它本质上是相同的看法\ shared_user_info.html.erb部分的主页上使用的(清单10.32)。因此,你可以替换上面这个代码块:

<%= render 'shared/user_info' %> 

请注意,您还需要添加<% @user ||= current_user %>到的意见顶部\ shared_user_info.html.erb部分(这是一样的是什么在清单11.20部分需要添加到统计数据中)。

此外,feed_item + feed部分与用户+ micropost部分之间有一些重复(尽管不完全重复),其中取决于显示哪个页面(follow_show,home或profile),有一个或多个列出的元素(名称,gravatar,管理员删除链接,微博内容,微博时间戳和微博删除链接)。这些可能也会被重构,以消除feed_item + feed部分,并根据页面将它们替换为用户+微博部分的组合。

0

我只是通过这个练习的工作,发现一个可行的解决方案。

首先我周围应用/视图/共享/ _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 %> 

然后我替换应用程序/视图/用户/ 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.哈特尔的教程去。

相关问题