Ruby on rails 如何在活动记录中为一个whos has\u many为空的模型编写查询?

Ruby on rails 如何在活动记录中为一个whos has\u many为空的模型编写查询?,ruby-on-rails,join,rails-activerecord,arel,Ruby On Rails,Join,Rails Activerecord,Arel,我有一个模范会员,他有很多会费 我想询问2012年没有缴纳会费的会员。关于DuesPayment的字段是:for_year。或者用英语-我希望所有在会费支付表中没有2012年记录的会员 #<DuesPayment:0x00000107b3cdd0> { :id => 1209, :member_id => 446, :amount => 25.0,

我有一个模范会员,他有很多会费

我想询问2012年没有缴纳会费的会员。关于DuesPayment的字段是:for_year。或者用英语-我希望所有在会费支付表中没有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
}

我想有一种更优雅的方法可以做到这一点。

在不了解您的模型的情况下,类似的方法应该可以奏效,如果您需要更多帮助,您可以发布您的模型代码,以及我们如何知道付款是否到期

unpaid_members = Member.DuesPayments.where(for_year: 2012)

您的会费支付模式中是否有某种付费/未付费栏?如果是这样,您可以:

Member.joins(:dues_payments).where("for_year = ? AND paid = ?", 2012, false)

2012年未缴纳会费的会员

Member.where("id NOT IN (?)", DuesPayment.select(:member_id).where(:for_year => 2012).map(&:member_id))

不,如果他们不付钱,那一年就没有记录了。
Member.where("id NOT IN (?)", DuesPayment.select(:member_id).where(:for_year => 2012).map(&:member_id))