【发布时间】:2025-11-29 14:35:01
【问题描述】:
我的模型会员有很多 DuesPayments。
我想查询 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
}
好像我需要一个外部连接?问题是,如果尚未付款,则没有记录可供“选择”。
这就是我现在正在做的,它基本上是一个子查询和一个反转。这里的想法是获取所有支付了会费的成员的 ID,然后选择所有不是 THOSE 成员的成员:
scope :dues_not_paid_in, lambda {|year|
Member.
where("id not in (?)",
DuesPayment.
select(:member_id).
where(:for_year => year).
collect(&:member_id).uniq
)
}
我的猜测是有一种更优雅的方式来做到这一点。
【问题讨论】:
标签: ruby-on-rails join rails-activerecord arel