Активная запись запроса с вложенной ассоциацией и включает - PullRequest
0 голосов
/ 22 февраля 2020

Я работаю над системой бронирования, которая позволяет владельцу отключать определенные даты на определенных свойствах. Итак, чтобы создать доступность для всех свойств на указанную c дату, мне нужно сначала посмотреть, есть ли какие-либо свойства property_blackout_dates на эту дату.

class PropertyBlackoutDate < ApplicationRecord
  belongs_to :property
end 

class Property < ApplicationRecord
  has_many :property_blackout_dates
end 

Так как я хочу, чтобы все свойства без property_blackout_date для указать c дату, я попытался сделать это:

date = "2020-02-22"
Property.includes(:property_blackout_dates).where.not(property_blackout_dates: {date: date}).references(:property_blackout_dates

Но он просто возвращает пустой объект, хотя у меня есть Properties и PropertyBlackoutDates.

Что я делаю не так?

1 Ответ

0 голосов
/ 22 февраля 2020

Для чего-то подобного я бы, вероятно, go вложил запрос:

Property.where.not(id: Property.select(:id).joins(:property_blackout_dates).where(property_blackout_dates: {date: date}))

Не проверен, но должен выполняться в одном запросе.

Вы можете сделать это также и для очистки.

class Property < ActiveModel::Base
  # Example: Property.not_blacked_out(date)
  scope :not_blacked_out, ->(date) { where.not(id: select(:id).joins(:property_blackout_dates).where(property_blackout_dates: {date: date})) } 
end
...