我有三个模型Event
:Comment
和Photo
。一个事件同时具有has_many :comments
和has_many :photos
。
我的目标是找到在过去 24 小时内收到新评论和/或照片的所有活动。
假设存在两个事件,一个带有最近的评论,另一个带有最近的照片。
如果我用一个连接单独查询它们,一切都会按预期工作:
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,但不是 #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' )