多くのDuesPaymentsを持つモデル会員がいます。
2012 年に dues_payment を行わなかったメンバーのクエリが必要です。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
}
外部結合が必要なようですか?問題は、支払いが行われていない場合に「選択」する記録がないことです。
これは私が現在行っていることで、基本的にはサブクエリと反転です。ここでの考え方は、会費を支払ったすべてのメンバーの ID を取得し、それらのメンバーではないすべてのメンバーを選択することです。
scope :dues_not_paid_in, lambda {|year|
Member.
where("id not in (?)",
DuesPayment.
select(:member_id).
where(:for_year => year).
collect(&:member_id).uniq
)
}
私の推測では、これを行うためのよりエレガントな方法があります。