我有Bike
和Category
个型号。通过BikeFilter
模型自行车has_many类别。
问题是,从搜索到我得到了5个不同的类别,我只需要找到这些自行车,其中BikeFilter
表中包含所有这5个类别的记录。
如果我在mysql中执行GROUP BY,它还会选择在bike_filters
中只有1个或几个类别的记录。并且需要谁只拥有所有这些。
Bike.rb
has_many :bike_filters
has_many :categories, :through => :bike_filters
BikeFilter.rb
belongs_to :category
belongs_to :bike
答案 0 :(得分:3)
您可以使用having
子句:
http://guides.rubyonrails.org/active_record_querying.html#having
并执行以下操作:
Bike.select("bikes.*, count(*) as num_of_categories")
.joins(:categories)
.where(categories: { id: cats })
.group("bikes.id")
.having("num_of_categories = ?", cats.length)
此查询将首先执行Bikes和Categories之间的内部连接(通过BikeFilter表),然后它将仅选择category {id包含在cats
数组中的行。
此时,查询将根据自行车ID对所有记录进行分组,并仅返回行数等于类别数的组。
几个笔记: