rails: не удается выбрать связанную модель с условиями

#ruby-on-rails #associations

#ruby-on-rails #ассоциации

Вопрос:

 class Desk < ApplicationRecord
 has_many :reservations, dependent: :destroy
end
  

и

 class Reservation < ApplicationRecord
 belongs_to :desk
end
  

Я хочу получить все столы на дату, когда они не зарезервированы таким образом:

 @free_desks = desks.select{|desk| desk.reservations.where.not(date: date)}
  

Итак, когда у меня есть 8 столов, например, и на дату «2020-09-06» стол (id: 1) зарезервирован в модели резервирования в качестве записи, я хочу вернуть 7 столов.
Но это не работает. Кто-нибудь может мне помочь?

Спасибо, ребята

Ответ №1:

Итак, вы хотите, чтобы все столы, у которых нет соответствующих резервирований?

Попробуйте это:

 Desk.left_joins(:reservations).where(reservations: {id: nil})
  

Что это значит?

Вы можете думать о нас как о попытке объединить две таблицы вместе. Мы перечисляем все диалоги, но у некоторых из них не будет никаких сообщений: идентификаторы будут равны нулю. Мы хотим их получить — следовательно, мы используем метод запроса активной записи ‘where’.

Предупреждения

Вы можете получить миллион таких записей, которые могут вас ошеломить. Будьте осторожны, если вы попытаетесь перебрать их все за один раз.

Обновленный вопрос:

 date = Date.parse('january 5 2013')

Desk.left_joins(:reservations).where(reservations: {id: nil, date: date.beginning_of_day..date.end_of_day})
  

Примечание: Это, скорее всего, предполагает время UTC (при условии, что вы не изменили никаких настроек по умолчанию).

Комментарии:

1. Большое вам спасибо, я попробую

2. Но он не фильтрует по дате. Пробовал это: Desk.left_joins(: резервирование). где.нет(оговорки: { дата: date}) Но в настоящее время не работает. Я пытаюсь выяснить

3. Я хочу, чтобы все столы, у которых нет резервирования на определенную дату

4. @MrGrashopper — это совершенно новый вопрос! В stack overflow вы не должны полностью изменять вопрос подобным образом. Следует либо задать полный вопрос заранее, либо задать совершенно новый вопрос

5. Извините, но в моем вопросе я упомянул об этом: «Я хочу получить все столы на дату, когда они не зарезервированы таким образом …»