Рассмотрим схему ниже для Пользователь , Соглашение и TaxiBooking таблицы:
Пользователи:
id - integer.
name - string.
email - string.
agreement_id - integer
Соглашение:
id - integer.
approved - boolean.
expired_at - date.
Заказ такси:
id - integer.
booked_time - datetime.
boarding_point - string.
destination_point - string.
client_name - string.
user_id - integer
Соглашение может быть оставлено одобренным или неутвержденным.
Соглашения имеют срок действия по умолчанию, например 6 месяцев, и по истечении 6 месяцев срок действия соглашения истекает. expired_at будет хранить дату истечения срока действия соглашения.
Здесь отношения Rails: Пользователь с Соглашение и Пользователь с TaxiBooking указаны ниже:
class User < ActiveRecord::Base
has_many :agreements
has_many :taxi_bookings
end
Связь рельсов Соглашение с Пользователь это
class Agreement < ActiveRecord::Base
belongs_to :user
end
Связь рельсов TaxiBooking с User - это
class TaxiBooking < ActiveRecord::Base
belongs_to :user
end
Здесь мне нужно запросить данные пользователей, у которых нет еще не истекших и утвержденных соглашений и у которых есть taxi_bookings с future booked_time со следующими значениями: 1058 *
Ближайшее время заказа такси (в будущем) для пользователей из таблицы TaxiBookings.
Последний утвержденный и истекший идентификатор соглашения с датой истечения срока.
Да / Нет - то есть, если у пользователя есть какие-либо неутвержденные и не истекшие соглашения, возвращайте Да иначе Нет .
Я попробовал выполнить следующий запрос.
User.joins('LEFT OUTER JOIN agreements ON users.id = agreements.user_id AND agreements.approved = ? ORDER BY users.id, agreements.expired_at ASC', true).select('DISTINCT ON (users.id) users.id, agreements.expired_at AS expired_at')
Но я не могу получить все значения в одном запросе.
Можем ли мы получить все вышеуказанные значения из одного запроса? Пожалуйста, дайте какой-нибудь эффективный способ получить значения для выше.