【110日目】【1日20分のRailsチュートリアル】【第9章】パーシャルのリファクタリングを行う
今日は「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 ユーザーを削除する」から。