2015-07-31 2 views
-3

У меня есть сложный активная запись запрос здесь:Inverse сложного активной записи запроса

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, что не в этом запросе. Но includes не может принять not запрос.

+0

Не знаю, почему мой вопрос получил вниз голосование без каких-либо комментариев –

ответ

0

Ну, это простой способ.

Два пути решения, что:

Первый:

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) 

Второй:

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 
+0

Спасибо! Будет ли у первого больше запросов mysql, чем у второго? –

+0

Да, второй лучше. Сначала передаются идентификаторы всей записи из БД в Rails, а затем в DB снова. – EugZol

+0

Еще раз спасибо за ответы! –

Смежные вопросы