Названная сфера и ассоциации - PullRequest
1 голос
/ 23 декабря 2010

У меня есть freight_request, поездки и бронирования.

Cargo_request has_many поездки (не все поездки относятся к freight_request)

Поездка has_many бронирования (все заявки принадлежат поездке)

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

В данный момент у меня есть

trip.rb

has_many :bookings
scope :not_booked, where("trips.id NOT IN (SELECT trip_id FROM bookings)")

booking.rb

belongs_to :trip

freight_request.rb

has_many :trips
scope :not_booked, joins(:trips) & Trip.not_booked
scope :no_trip, where("freight_requests.id NOT IN (SELECT freight_request_id FROM trips)")

Проблема в том, что код no_trip не возвращает freight_requests, у которых нет поездок (ничего не возвращает).

У кого-нибудь есть идеи, как я могу это сделать?Спасибо заранее

1 Ответ

0 голосов
/ 19 июля 2011

Полагаю, вы забыли включение в модели Trip в: no_trip scope.

scope :no_trip, includes(:trips).where("freight_requests.id NOT IN (SELECT freight_requests_id FROM trips)")

Я также хотел отметить, что этот запрос проходит все записи командировки, которые могутдорого, если у вас много данных.Кэш счетчика в модели FreightRequest может быть более быстрым способом, в этом случае ваша область действия: no_trip будет:

scope :no_trip, where(:trips_counter => 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...