、、の3つのモデルEvent
がComment
ありPhoto
ます。イベントにはとの両方がhas_many :comments
ありhas_many :photos
ます。
私の目標は、過去24時間以内に新しいコメントや写真を受け取ったすべてのイベントを見つけることです。
最近のコメントと最近の写真の2つのイベントが存在するとします。
1つの結合で個別にクエリを実行すると、すべてが期待どおりに機能します。
Event.joins(:comments).where("comments.created_at >= :today", :today => Time.now.beginning_of_day)
戻り値:[#<Event id: 1>]
Event.joins(:photos).where("photos.created_at >= :today", :today => Time.now.beginning_of_day)
戻り値:[#<Event id: 2>]
両方の結合を組み合わせると、なぜですか。
Event.joins(:comments, :photos)
.where("comments.created_at >= :today OR photos.created_at >= :today", :today => Time.now.beginning_of_day)
私が受け取るもの[#<Event id: 2>, #<Event id: 2>]
—#2の2倍ですが、#1ではありませんか?
ARelによって生成されるSQLは
SELECT "events".*
FROM "events"
INNER JOIN "comments"
ON "comments"."event_id" = "events"."id"
INNER JOIN "photos"
ON "photos"."event_id" = "events"."id"
WHERE ( comments.created_at >= '2013-03-25 23:00:00.000000'
OR photos.created_at >= '2013-03-25 23:00:00.000000' )