[英]Rails: select model
我有一个模特Shop
:
class Shop < ActiveRecord::Base
has_and_belongs_to_many :services
end
和模型Service
:
class Service < ActiveRecord::Base
has_and_belongs_to_many :shops
end
我想查询所有提供以下所有服务的商店:
因此,请退还所有包含服务reparation AND advise AND shipping
商店,并提供reparation AND advise AND shipping
。
仅通过ActiveRecord查询可以做到这一点吗?
谢谢!
请参阅MySQL:选择联接表匹配所有值的记录,以了解如何在sql中进行操作。
对于一个更简单的方法,它执行一系列简单查询而不是单个复杂查询,您可以执行以下操作:
#starting with the services in an array called @services
#(which could come from params[:service_ids] for example)
#find shops which have ALL these services.
shop_ids = @services.map(&:shop_ids).inject{|a,b| a & b}
@shops = Shop.find(shop_ids)
关键是.inject{|a,b| a & b}
.inject{|a,b| a & b}
:inject是一种数组方法,该方法在第一个元素和第二个元素(a和b)之间执行功能,然后再次将该结果与块一起使用,与第三个元素等一起使用,遍历数组。 &
运算符是数组相交的,因此最终只会得到为所有服务返回的shop_id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.