こんにちは。たなか(@tanaka_ricecake)です。
先日Railsチュートリアル一周目が完了しました。
https://twitter.com/tanaka_ricecake/status/1147529005236494336
2019/07/06 #今日の積み上げ です!
・ブログ1本生産
#Railsチュートリアル 1周目完了しました!
テストなどスルーしてきた部分も多く、すぐ2周目に入りますが、ひとまず今夜は1周目の喜びに浸ります
今日もおつかれわたし!
今回は10章で紹介されていたPartialのリファクタリングについて、個人的に目から鱗だったので備忘録的にシェアしてみようと思います。
もくじ
Railsチュートリアル10章 「二段階のpartialリファクタリング」
以下のような、ユーザー一覧を表示させるコードを、より短く書くという内容です。
<ul class="users">
<% @users.each do |user| %>
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
<% end %>
</ul>
一段階目のリファクタリング
一度目はeach文の中の<li>のをヘルパーに切り出すというものです。
以下のように書きます。
<ul class="users">
<% @users.each do |user| %>
<%= render user %>
<% end %>
</ul>
ポイントはrenderがファイル名を指定した書き方ではないところです。
ここでは、
render
をパーシャル (ファイル名の文字列) に対してではなく、User
クラスのuser
変数に対して実行している点に注目してください。この場合、Railsは自動的に
_user.html.erb
という名前のパーシャルを探しにいくので、このパーシャルを作成する必要があります。
<%= render user %> のようにrenderにリソース名を指定することができます。
上記のように書くと自動的に
app/views/リソース名/_モデル名.html.erb
というファイルを指定したことになります。
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
</li>
二段階目のリファクタリング
4行分を1行にできたので、ここまででもリファクタリング成功ですが、Railsチュートリアルはこれだけでは終わりません。
上記のコードはさらに最終的に以下のように書くことができます。
<ul class="users">
<%= render @users %>
</ul>
Railsは
@users
をUser
オブジェクトのリストであると推測します。さらに、ユーザーのコレクションを与えて呼び出すと、Railsは自動的にユーザーのコレクションを列挙し、それぞれのユーザーを
_user.html.erb
パーシャルで出力します。これによりコードは極めてコンパクトになります。
Railsの用意してくれている書き方で、render @users のようにすると自動的に
<% @users.each do |user| %>
<%= render user %>
<% end %>
のようになります。
最初は6行使ってユーザー一覧をぐるぐる回していましたが、最終的には<%= render @users %>
の一行で完結してしまいました。すごいぜ!
まとめ
ということでRailsチュートリアル完走報告と感動した章についてのシェアでした。
業務の間を縫いつつ結構バタバタと進めてしまったので、サラッと流した箇所やテストなどを踏まえて2周目頑張ってみようと思います。
そのうちRailsチュートリアル完走のコツやハマったエラーまとめ記事なども書いてみますのでお楽しみに。
短いですが今回はここまで。
関連サイト
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-partial_refactoring