4

Michael Hartl の Rails Tutorial 2nd Edition の Chapter 11 Exercises に取り組んでいる人はいますか?

Chapter 11, Exercise 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' %> 

また、views\shared_user_info.html.erb パーシャルの先頭にも追加する必要があることに注意してください<% @user ||= current_user %>(これは、リスト 11.20 で stats パーシャルに追加するために必要だったものと同じです)。

さらに、表示されているページ (follow_show、home、または profile) に応じて、feed_item + フィード パーシャルとユーザー + マイクロポスト パーシャルの間にいくつかの重複 (完全な重複ではありません) があります (名前、gravatar、管理者の削除リンク、マイクロポストのコンテンツ、マイクロポストのタイムスタンプ、マイクロポストの削除リンク)。これらもおそらくリファクタリングして、feed_item+feed パーシャルを削除し、ページに応じて user + 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 に答える