最初に
カレンダー企画2020の24日目
プログラミングの勉強を始めて3ヵ月程経ったので学んだことのメモをアウトプットとして記事に残します。
これからプログラミングの世界に入る人の手助けになれたら嬉しい限りです。
間違っていたり、言葉が違っていたり、誤解されるような言葉があったら教えてください^^
言葉を長々と読みづらかったら申し訳ありません。少しずつなれてがんばります。
Rails:部分テンプレート(パーシャル)について
これはとても便利です。
教えてもらっている人からも部分テンプレを使っていることをよく褒められた覚えがあるので良いことなのだと思います。まだあまり良さを分かってない^^;(教えてくれる人がよくパーシャルって言ってましたので気取って以降使いますね^^)
私はHTMLの記述でサボれるので使えるところは使いまくっているだけですね。
この楽な方法を知らない人にはぜひ知ってほしい!作業スピード上がります^^
パーシャルのメリットは??
素人目線の私が考えるに
- 記述がとにかく少なくて済むから楽!
- HTMLの記述が全体的に少なくなるので見やすいかも!
- 修正する時に修正する箇所が少なくて楽!そして修正漏れがないからさらに良い!
1. 記述がとにかく少なくて済むから楽
アプリケーションを作成していて同じ記述をするところをパーシャルを使って記述するので実際のHTMLには1行で済む。
実際に記述するのはパーシャル作成時の1回だけ
とにかく記述を少なくできるのが良い!
2. HTMLの記述が全体的に少なくなるので見やすいかも
HTMLには1行で済むので全体的に量が少なくなり見やすいですね。
いっぱい下にスクロールすることがないので見直す時も助かる!
3. 修正する時に修正する箇所が少なくて楽!そして修正漏れがないからさらに良い
これが1番嬉しいところ
訂正する時には元のパーシャルだけを訂正すると、すべてにその訂正が適応されるので訂正時も楽!
これを知らないでエラーが起きた時は地獄でした。関連するすべてを訂正するけど漏れていたりと時間がかかったけどパーシャルを使えば1回の訂正ですべてに漏れなくいくので楽です!
パーシャルの作り方
これも簡単!
- 共通している記述を探す。
- 見つけたらパーシャルを作成する。
- 作成したパーシャルを呼び出す記述を該当箇所に行う
終わり!
<% @posts.each do |post| %>
<div class="post_<%= post.id %>">
<%= post.member.name %>
<%= post.title %>
<%= post.body %>
</div>
<% end %>
.
.
.
.
<% @posts.each do |post| %>
<div class="post_<%= post.id %>">
<%= post.member.name %>
<%= post.title %>
<%= post.body %>
</div>
<% end %>
こんな感じてPostのindexとshowがあったとします。
どちらにもPostの一覧表示をしたいのでeach文で行っていたとしたらパーシャルの出番です!
<% posts.each do |post| %>
<div class="post_<%= post.id %>">
<%= post.member.name %>
<%= post.title %>
<%= post.body %>
</div>
<% end %>
パーシャル作成時には先頭は(_)にするのは忘れずに!名前は適当です(一目見て何かわかる名前が良いと思います。)
あとはインスタンス変数として(@)消しておいた方が幅広く使えます。消さなくてもパーシャルとして動きますが汎用性があるのでは無しのほうです。
<%= render layouts/post_index, posts: @posts %>
<%= render layouts/post_index, posts: @posts %>
さきほどパーシャル作成の際に(@)を消したのでそれを指定する為にposts: @posts
をつけてます。
posts
はインスタンス変数に変えたい場所を指定し、該当するインスタンス変数を記述すればOKです!
たとえば使う場所によってはposts: @user
になることもあります。
今回の例題ではちょっと無理がありますが^^;
フラッシュメッセージやバリデーションの時はパーシャルを作成して、それぞれ合わせたインスタン変数に書き換えるだけで使えますので便利!
最後に
パーシャルは使いこなせるようにもっとなりたいと思っています!
最近知ったのはURL毎で表示する場所を一部変える処理をすればパーシャルできるのでよりパーシャルが増やせそうでワクワクしてます。