Ruby on rails 复杂活动记录查询的逆运算

Ruby on rails 复杂活动记录查询的逆运算,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我在这里有一个复杂的活动记录查询: House.includes(:bookings).where("(bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?) OR (bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?)", 'booked', check_dates[

我在这里有一个复杂的活动记录查询:

House.includes(:bookings).where("(bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?) 
  OR (bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?)", 
  'booked', check_dates[:check_out_date], check_dates[:check_in_date], 
  'blocked', check_dates[:check_out_date], check_dates[:check_in_date]).references(:bookings).uniq
House.包括(:bookings)。其中(((bookings.status=?和bookings.check_-in=?)
或(bookings.status=?和bookings.check_in=?)“,
“预订”,签入日期[:签出日期],签入日期[:签入日期],
“已阻止”,签出日期[:签出日期],签入日期[:签入日期]。参考(:预订)。uniq
我想得到本查询中没有的
房子的其余部分。

但是
包含
不能接受
查询。

好吧,有简单的方法也有困难的方法

有两种解决方法:

第一:

ids = House.includes(:bookings).where("(bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?) 
  OR (bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?)", 
  'booked', check_dates[:check_out_date], check_dates[:check_in_date], 
  'blocked', check_dates[:check_out_date], check_dates[:check_in_date]).references(:bookings).uniq.ids
result = House.where.now(id: ids)
ids=House.includes(:bookings)。其中(((bookings.status=?和bookings.check_-in=?)
或(bookings.status=?和bookings.check_in=?)“,
“预订”,签入日期[:签出日期],签入日期[:签入日期],
“已阻止”、签出日期[:签出日期]、签入日期[:签入日期]。参考(:预订)。uniq.id
结果=House.where.now(id:ids)
第二:

House.includes(:bookings).where("NOT( (bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?) 
  OR (bookings.status = ? AND bookings.check_in <= ? AND bookings.check_out >= ?) )", 
  'booked', check_dates[:check_out_date], check_dates[:check_in_date], 
  'blocked', check_dates[:check_out_date], check_dates[:check_in_date]).references(:bookings).uniq
House.包括(:bookings)。其中(“NOT”((bookings.status=?和bookings.check_-in=?)
或(bookings.status=?和bookings.check_in=?)“,
“预订”,签入日期[:签出日期],签入日期[:签入日期],
“已阻止”,签出日期[:签出日期],签入日期[:签入日期]。参考(:预订)。uniq

我不知道为什么我的问题没有任何评论就被否决了谢谢!第一个会比第二个有更多的mysql查询吗?是的,第二个更好。首先将所有记录的ID从DB传输到Rails,然后再传输到DB。再次感谢您的回复!