1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails:パーシャルでインスタンス変数を使用してはいけない理由

Posted at

読んで欲しい人

  • パーシャルにインスタンス変数を書いてエラーになった人
  • 過去の自分

動作環境

  • MacOS 14.5
  • ruby 3.3.0
  • Rails 7.1.3.3
  • psql (PostgreSQL) 14.11

課題

  • 下記のコードにレビューをいただいた
_post.html.haml
# パーシャルファイル
.p-4.d-flex.flex-column.justify-content-center.mt-6
  .post-container.p-3
    .mb-3
      = @user.name

レビュー内容: パーシャルでインスタンス変数をつかわないように

なぜダメか

理由1

そもそもパーシャルの利用目的は、

viewの一部を切り出して、再利用するためのもの

なので、
インスタンス変数をパーシャルの中で使用してしまうと、他の部分で再利用ができない。

理由2

キャッシュの効率が悪い

Railsではパーシャルを呼び出すタイミング(render)で、キャッシュを生成してくれています。

  • キャッシュとは(ざっくり)
    よく使用するデータを保存して、すぐに使用できるようにしたもの。
    今回の場合は、パーシャルの内容をキャッシュとして保存してくれる。

キャッシュを作成するにはキャッシュキーが必要になるが、
インスタンス変数だと毎度その値が違うため、キャッシュとして保存しても実際は違うビューが表示されたりする。
効率が悪い

解決方法

  1. このパーシャルを利用するファイルで、ローカル変数を定義する
  2. ローカル変数に対して、インスタンス変数を渡してあげる
= render 'post', post: @post

学び・感想

  • ダメなのは知っていたが、なぜか?までは知らなかったので理解できて良かった
  • 何度も注意されているので気をつけたい

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?