전달 된 여러 서비스를 기반으로 서비스 공급자를 찾는 응용 프로그램을 만들었습니다. 이것은 many_through를 통해 이루어 지므로 join 객체가 있습니다. 기본적으로 사용자가 서비스 A 및 서비스 B가있는 서비스 공급자를 요청하면 범위가 서비스 A와 서비스 B 중 하나를 제공하는 서비스 공급자 또는 서비스 A 또는 서비스 B를 제공하는 다른 서비스 공급자를 반환합니다. 두 가지 서비스를 모두 제공하는 제공자에게만 국한하십시오.Rails에서 명명 된 범위를 포함하는 쿼리가 아닌 포괄적 인 쿼리를 만드는 방법은 무엇입니까?
내 범위는 다음과 같습니다
named_scope :with_services, lambda { |services| {
:conditions => ["services.id IN (#{services.map{|s| s.id}.join(', ')})
AND service_options.service_owner_type='ServiceProvider'
AND service_options.service_owner_id = service_providers.id"],
:include => [:services, :service_options]
}
}
당신은 내가이 작업을 수행 할 IN 연산자를 사용하고 볼 수 있듯이. 그러나 IN은 "내가 서비스 A 또는 서비스 B를 가지고있는 모든 서비스 제공 업체를 구하십시오"라고 말하면서 "실제로 서비스 A와 서비스 B를 모두 가지고있는 서비스 제공 업체를 구하십시오"라고 말합니다.
단일 쿼리에서 이러한 유형의 필터링을 수행 할 수 있습니까? 아니면 복합 쿼리를 수행하거나 단순히 결과를 반복하고 필요한 서비스를 모두 지원하지 않으면 목록에서 제거해야합니까?
감사합니다. 나는이 질문을 언급하는 것을 잊어 버렸습니다 .1 개의 서비스 또는 5 개의 서비스가 전달 될 수있었습니다. 가장 좋은 방법은 없을까요? 서비스를 매핑하고 해당 SQL 스 니펫을 생성 하시겠습니까? 다음과 같이하십시오 : : conditions => [ "# {services.map {| s | –
불행히도,이 방법을 시도 할 때 아무런 결과도 얻지 못합니다. 주어진 ID는 사용할 수 없기 때문에 믿을 수 있다고 생각합니다. '('+ s.id + ')}. 같거나 두 개의 상호 배타적 인 값입니다. 거의 복합 쿼리가 필요한 것 같습니다. 결과를 구문 분석하려면 for 루프를 사용해야 할 수도 있습니다. - \ –