繁体   English   中英

Rails:选择型号

[英]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

我想查询所有提供以下所有服务的商店:

  1. 赔偿
  2. 劝告
  3. 运输

因此,请退还所有包含服务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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM