【问题标题】:Refactoring - Chapter 11, Exercise 3 Rails Tutorial 2nd Edition重构 - 第 11 章,练习 3 Rails 教程第 2 版
【发布时间】:2012-05-02 12:27:49
【问题描述】:

还有其他人通过Chapter 11 Exercises for Michael Hartl's Rails Tutorial 2nd Edition工作吗?

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

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

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

谢谢!

【问题讨论】:

  • 我也找不到在这些页面上重构的通用代码。也许问题是本教程以前版本的保留,没有那么多重构代码(?)。如果您正在寻找使代码更紧凑的方法,我建议您使用 Haml 重写您的视图,并可能从主页、联系人、关于和帮助页面中获取静态内容,并将它们放入 Markdown 文件中你可以渲染。

标签: ruby-on-rails-3 refactoring railstutorial.org


【解决方案1】:

你可以重构代码清单 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' %> 

请注意,您还需要将 &lt;% @user ||= current_user %&gt; 添加到 views\shared_user_info.html.erb 部分的顶部(这与在清单 11.20 中添加到 stats 部分所必需的相同)。

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

【讨论】:

    【解决方案2】:

    我刚刚完成了这个练习并找到了一个可行的解决方案。

    首先我更改了 app/views/shared/_user_info.html.erb 以使用 @user 变量(如果已设置),否则使用 current_user 变量。

    app/views/shared/_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

    app/views/users/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 的教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多