Я создал приложение, которое находит поставщиков услуг на основе нескольких переданных ему услуг. Это делается с помощью many_through, поэтому есть объект соединения. По сути, если пользователь запрашивает поставщиков услуг с Услугами A и B, моя область возвращает поставщиков услуг, которые предлагают ОБА Услугу A и Услуги B, или других поставщиков услуг, которые предоставляют Услугу A или Услугу B. Вместо этого мы хотели бы ограничить его только теми поставщиками, которые предоставляют ОБА услуги.
Моя область видимости выглядит так:
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.»
Можно ли выполнить этот тип фильтрации в одном запросе, или мне нужно было бы выполнить сложный запрос или просто просмотреть результаты и удалить их из списка, если они не поддерживают все необходимые службы?