Lチカ開発ブログ

https://l-chika.com/の開発ブログ

ActiveRecordのincludesでネストされた関連をロードする方法

ActiveRecordのincludesメソッドで関連テーブル(belongs_to, has_one, has_many)をキャッシュできる。 そこからさらに、関連テーブルの関連をキャッシュする方法

環境

前提

  • Bookがauthor,publisher,categories をもつ
  • Authorがaddress, affiliationをもつ

やりたいこと

Bookの関連をキャッシュ、かつAuthorの関連もキャッシュしたい

class Book < ApplicationRecord
  belongs_to :author
  has_one :publisher
  has_many: categories
end

class Author < ApplicationRecord
  has_one :address
  has_one :affiliation
end
Book.includes([{ author: [:address, :affiliation] }, :publisher, :categories]).where(id: ids)

ちなみに自分の開発のある機能で、このincludesを利用する前後でシステムのLatencyが半減した。 Railsで簡単にできるパフォーマンス改善。

参考

Railsで複数テーブルのjoins/includesとwhere検索 | EasyRamble