4

还有其他人正在完成Michael Hartl 的 Rails 教程第 2 版的第 11 章练习吗?

第 11 章,练习 3 要求:重构代码清单 11.31,为以下/关注页面、主页和用户显示页面的通用代码添加部分代码。

我在主页、用户展示页面或 show_follow 页面中没有看到任何值得重构的内容

如果有人想出一些对这个练习有价值的东西,很想知道。

谢谢!

4

2 回答 2

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 部分的顶部(这与在清单 11.20 中添加到 stats 部分所必需的相同)。

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

于 2012-08-24T20:27:00.630 回答
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 的教程。

于 2014-08-22T21:12:24.267 回答