У меня есть таблица под названием invoices
и invoices
belongs_to :subscription
и subscription
belongs_to :user
. A user
has_many :licenses
. Мне нужны два запроса: каждый получает invoices
, у которого было licenses
, созданное в течение определенного периода времени, так что те licenses
не имеют определенного viewership_id
.Комплексные соединения ActiveRecord
Я был в состоянии получить этот запрос правильно, вот это:
Invoice.joins(
subscription: {
user: :licenses
}
).where(
# Other licenses during date range
licenses: {
created_at: date_range
}
).where.not(
licenses: {
viewership_id: Viewership.member.tier(1).first.id
}
)
Теперь мне нужен запрос, который получает все invoices
, которые не имеют каких-либо лицензий, созданных в течение определенного периода времени. Нечто подобное (хотя это не работает):
Invoice.includes(
subscription: {
user: :licenses
}
).where(
licenses: {
user_id: nil,
created_at: date_range # <-- removing this works, but is an incorrect query,
# because the user may have created other
# licenses outside of this date_range and
# that's alright--so querying without the
# date_range means i may miss some users who
# have licenses that just weren't created in
# the date_range
}
)
Мне сложно определить, что именно вы хотите, особенно с этим комментарием. Это может помочь, если вы можете создать небольшую визуальную таблицу лицензий, которая показывает, чего вы пытаетесь достичь. Я также немного озадачен - если вы хотите, это лицензии, почему бы вам не начать запрос с лицензии? – max
@max Я сказал, что мне нужно количество счетов-фактур, а не лицензий. Попробую написать диаграмму – trevorhinesley
Извините, мой плохой. Рассматривали ли вы настройку менее тангенциальной связи между фактурой и лицензией? Тот факт, что вы присоединяетесь к 3 таблицам вниз, походит на настоящий запах кода, кроме того, что он медленный. – max