세 모델이 있습니다 : Event
, Comment
및 Photo
입니다. 이벤트에는 has_many :comments
과 has_many :photos
이 있습니다.OR 조건을 가진 여러 내부 조인에서 잘못된 결과가 발생했습니다.
내 목표는 지난 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 그것은이 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')
제안 사항을 오해 할 수도 있지만'.uniq' 만 추가하면 이벤트 # 1과 이벤트 # 2 대신 이벤트 # 2가 한 번만 반환됩니까? – janfoeh
미안하지만. MurifoX가 말했듯이, 당신은 왼쪽 join을해야하고 inner join은하지 말아야합니다. try Event.include (: comments, : photos) .where (...) 솔루션 인 경우 제안을 수정합니다. –