Ruby on Rails查询无法正常工作

我有几个列表,我定义了一些filter。 特别是,列出has_many :spaces, through: :designations has_many :amenities, through: :offerings has_many :spaces, through: :designationshas_many :amenities, through: :offerings

我使用filter来限制显示的列表。

两个主要的是:

 # filter by space type if params[:search][:space_ids].present? && params[:search][:space_ids].reject(&:blank?).size > 0 @listings = @listings.joins(:spaces).where('space_id IN (?)', params[:search][:space_ids].reject(&:blank?)).uniq end # filter by amenities if params[:search][:amenity_ids].present? && params[:search][:amenity_ids].reject(&:blank?).size > 0 @listings = @listings.joins(:amenities).where(amenities: { id: params[:search][:amenity_ids].reject(&:blank?) }).group('listings.id').having('count(*) = ?', params[:search][:amenity_ids].reject(&:blank?).size) end 

第一个filter说:获取与所选空间类型匹配的所有列表。

第二个filter说:获取所有具有所有选定设施的列表。

这些filter大部分都有效,但并非总是如此。 特别是,假设列表A具有空间类型1和2以及舒适性2.如果我过滤空间类型1和2(所以space_ids: ['1', '2', ''] )和舒适性2(所以amenity_ids: ['2', ''] ),我得到: #

但我应该列出A.查询有什么问题?

基本上,我正在尝试实现这一点: 使用ActiveRecord对多对多关系进行复杂Rails查询

或者: http : //blog.hasmanythrough.com/2006/6/12/when-associations-arent-enough-part-2

having('count(*) = ?', params[:search][:amenity_ids].reject(&:blank?).size)更改having('count(*) >= ?', params[:search][:amenity_ids].reject(&:blank?).size) (即= to >= )修复了问题。

但现在还有另一个问题: Ruby on Rails查询会产生意想不到的结果 。