我创建了一个应用程序,它根据传递给它的多个服务来查找服务提供者。这是通过 has 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 的服务提供商”。
是否可以在单个查询中进行这种类型的过滤,或者如果它们不支持所有必需的服务,我是否需要进行复合查询或简单地遍历结果并将它们从列表中删除?