LoginSignup
13
9

More than 5 years have passed since last update.

acts-as-taggable-onを使ってtag機能を作成したときに大量のN+1が発生するやーつ

Posted at

やったこと

*具体的な使い方などは割愛します。適宜リファレンスなどを参照してください。

なにがおきたか

  • includeしたはずなのに、viewで呼び出すとsqlが発行され、tagが大量の N+1を発生させる

実際に書いてたコード

postモデル
acts_as_taggable_on
taggingモデル
has_many tags
tagモデル
belong_to tagging
posts_controller

Post.include(tagging: :tag)

view
@post.tags_list
  • tags_listはgemの中で定義されているdefalultのメソッド
  • tagの名前を配列で返してくれる

=> レコードの数だけ tagが呼ばれてしまう。

解決策

下記のようにコードを変更

posts_controller
Post.include(:tag)
view
@post.tags.pluck(:name).join("<br />").html_safe

どうやら、includeの書き方とメソッドの呼び出し方でsqlが変化するようだ。
これがライブラリーの怖さでもある

13
9
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
13
9