activerecord - Ruby on Rails query not working properly -


i have several listings, , define number of filters. in particular, listing has_many :spaces, through: :designations , has_many :amenities, through: :offerings.

i use filters restrict listings shown.

the 2 main ones are:

# filter 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 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 

the first filter says: of listings match of selected space types.

the second filter says: of listings have of selected amenities.

these filters work part, not always. in particular, suppose listing has space types 1 , 2 , amenity 2. if filter space types 1 , 2 (so space_ids: ['1', '2', '']) , amenity 2 (so amenity_ids: ['2', '']), get: #<activerecord::relation []>.

but should listing a. wrong query?

basically, trying implement this: complex rails query using activerecord on many many relationship

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

changing having('count(*) = ?', params[:search][:amenity_ids].reject(&:blank?).size) having('count(*) >= ?', params[:search][:amenity_ids].reject(&:blank?).size) (i.e., = >=) fixes issue.

but there issue: ruby on rails query yielding unexpected results.


Comments

Popular posts from this blog

java - Static nested class instance -

c# - Bluetooth LE CanUpdate Characteristic property -

JavaScript - Replace variable from string in all occurrences -