У меня есть модель, у которой есть много DuesPayments.Как написать запрос в Active record для модели с whos has_many пуст?
Я хочу получить запрос для членов, которые не ввели их dues_payment в 2012 году. Поле в DuesPayment: for_year. Или на английском языке - Я хочу, чтобы все члены, которые не имеют записей в таблице dues_payments с годом 2012
#<DuesPayment:0x00000107b3cdd0> {
:id => 1209,
:member_id => 446,
:amount => 25.0,
:created_at => Thu, 07 Feb 2013 17:01:15 EST -05:00,
:updated_at => Thu, 07 Feb 2013 17:01:15 EST -05:00,
:for_year => 2013,
:payment_notification_id => 300
}
Кажется, что мне нужно внешнее соединение? Проблема в том, что там нет записи, чтобы «выбрать», если платеж не был выполнен.
Это то, что я делаю сейчас, что в основном является подзапросом и инверсией. Идея заключается в том, чтобы получить идентификаторы всех членов, которые платили свои взносы, а затем выбрать все элементы, которые не являются членами ТЕХ:
scope :dues_not_paid_in, lambda {|year|
Member.
where("id not in (?)",
DuesPayment.
select(:member_id).
where(:for_year => year).
collect(&:member_id).uniq
)
}
Я думаю, что есть более элегантный способ сделать это.
нет, если они не платят, нет никаких записей вообще в этом году. – pixelearth