ぞえの技術めも

Ruby on Rails勉強中

【110日目】【1日20分のRailsチュートリアル】【第9章】パーシャルのリファクタリングを行う

Ruby on Railsチュートリアル(第3版)

今日は「9.3.5 パーシャルのリファクタリング」から。

9.3.5 パーシャルのリファクタリング

実はRailsにはコンパクトなビューを作成するための素晴らしいツールがいくつもあります。
この節ではそれらのツールを使用して一覧ページのリファクタリング (動作を変えずにコードを整理すること) を行うことにします。

へー。ツール使ってシンプルに書けるならそれに越したことはないね。

リファクタリングの第一歩は、リスト9.41のユーザーのliをrender呼び出しに置き換えることです (リスト9.46)。

<li>タグ使ってた箇所を<%= render user %>に変更。

app/views/users/index.html.erb

  :
<ul class="users">
  <% @users.each do |user| %>
    <%= render user %>
  <% end %>
</ul>
  :

この場合、Railsは自動的に_user.html.erbという名前のパーシャルを探します。このパーシャルを作成する必要があります (リスト9.47)。

touchコマンドでファイルを作成して、

$ touch app/views/users/_user.html.erb

下記内容に更新。
さっき置き換えた内容をパーシャルに持って来る感じ。

app/views/users/_user.html.erb

<li>
  <%= gravatar_for user, size: 50 %>
  <%= link_to user.name, user %>
</li>

これは間違いなく大きな進歩です。しかしここで終わらせず、さらに改良してみましょう。今度はrenderを@users変数に対して直接実行します (リスト9.48)。

更にすっきりした。eachメソッドすらなくなった。

app/views/users/index.html.erb

  :
<ul class="users">
  <%= render @users %>
</ul>
  :

Railsは@usersをUserオブジェクトのリストであると推測します。さらに、ユーザーのコレクションを与えて呼び出すと、Railsは自動的にユーザーのコレクションを列挙し、それぞれのユーザーを_user.html.erbパーシャルで出力します。

へー。追加したパーシャルの方にeachメソッド移すわけじゃないんだ。
そんなツールがあるんだなぁ…。

リファクタリングを行う場合には、アプリケーションのコードを変更する前と後で必ずテストを実行し、いずれも成功になることを確認するようにしてください

リファクタリングできたのでテスト実行。

$ bundle exec rake test
37 tests, 117 assertions, 0 failures, 0 errors, 0 skips

問題ないですね。

今日の学習時間は【15分】

次は「9.4 ユーザーを削除する」から。