- includes
- preload
- eager_load
などで関連テーブルを読み込んだ際に、whereメソッドから関連テーブルのカラムを参照したい場合はreferencesキーワードを使って関連テーブル名を宣言する必要がある
User.includes(:posts).where("posts.name = 'foo'")
# Doesn't JOIN the posts table, resulting in an error.
User.includes(:posts).where("posts.name = 'foo'").references(:posts)
# Query now knows the string references posts, so adds a JOIN
joins
メソッドを使う際は不要だと思うが、incluedes
などの関連付けをeager loadingするメソッドを採用した際にはreferencesメソッドの出番になる感じだと思う
https://api.rubyonrails.org/v7.1/classes/ActiveRecord/QueryMethods.html#method-i-references
joinsメソッドを使った際はこんな感じでwhereを指定できる
time_range = (Time.now.midnight - 1.day)..Time.now.midnight
Customer.joins(:orders).where('orders.created_at' => time_range).distinct