業務中に知って驚いたこと。休日に気が向いたら深堀するかも。
前提
-
User has_many Posts through UserPosts
という関連付けをしたい。 -
User
テーブルは、Posts
テーブルとUserPosts
テーブルとは異なるDBのテーブル。
予想
User.rb
has_many :posts
has_many :read_posts, source: :posts, through: :user_posts
なんてasociationをモデル層に書いても流石にUser.read_posts
は取ってこられないだろうと諦めの境地にいた。
しかしだ。。。
- ActiveRecordがpreloadを使っているのなら、関連付け可能で取ってこれる
- ActiveRecordがeagerloadを使っているのなら、関連付け不可能(生成されるクエリの中テーブルのでJOINを使っているから)
詳しいことは時間があったら調べてる予定
memo. includesは、eager_loadとpreloadをよしなに使い分ける