2014-06-05 1 views
0

두 개의 날짜 필드를 쿼리하여 문서를 가져 오는 방법으로 기존 :once_at:start_at이 오늘보다 크고이 필드가 nil 인 경우 문서를 건너 뛰는 방법이 있습니까? 여기서 :once_at:start_at은 항상 개별적으로 발생합니다. 내 예제에서는 all_of 두 번째 쿼리 결과를 반환합니다, 아래의 코드에서 불행히도 모든 서류를 :start_at:once_at 함께 제공합니다 nil 있습니다. 오늘보다 두 개의 날짜 필드를 가져오고 nil 필드를 건너 뛰는 방법은 무엇입니까?

scope :upcoming, -> { any_of(:once_at.ne => nil, :start_at.ne => nil).any_of(:once_at.gte => Date.today, :start_at.gte => Date.today) } 

해결 : 단말기에서

내가 실제 쿼리도 :start_at => nil하고 있다는 사실을 알 수있었습니다. 최근에 범위를 사용하기 시작했고 default_scope에 :start_at => nil으로 문서를 가져 오는 옵션이 있다는 것을 알았습니다. 따라서 default_scope 쿼리를 제외하고는 예외로 작동한다는 것을 알았습니다. 나는이 질문에 대해 유감이다.

+0

만족해야 할 모든 조건으로 질문을 업데이트하십시오. – Santhosh

+0

나는 내 질문을 개발했다. – luzny

+0

업데이트 된 답변을 확인 했습니까? – Santhosh

답변

1

any_of를 사용하면 nil 값을 가진 것조차 선택합니다. 사용해보기

scope :upcoming, -> { where(:once_at.gte => Date.today.beginning_of_day, :start_at.gte => Date.today.beginning_of_day) } 
+0

이것은 또한 빈 결과를 반환합니다. 모든': once_at'과': start_at'가 정의되어 있지 않으므로': $ or'가 필요하지만': $ or'는 모든 문서를 반환합니다. nil 쿼리가 첫 번째 필드에 대해서만 결과를 얻는 지간에': $ and '를 시도하면. – luzny

+0

이것은 날짜 필드가 모두 있고 오늘보다 크거나 같은 모든 컬렉션을 반환합니다. 또는 업데이트 된 답변을 확인하십시오. – Santhosh

+0

이 두 번째 해결 방법은 날짜 필드에 대해 nils를 사용하여 모든 문서를 다시 가져옵니다. ( – luzny

관련 문제