Ruby on Rails查询无法正常工作
我有几个列表,我定义了一些filter。 特别是,列出has_many :spaces, through: :designations
has_many :amenities, through: :offerings
has_many :spaces, through: :designations
和has_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查询会产生意想不到的结果 。