如何使用活动记录指定关联的最小计数

时间:2013-05-28 23:03:38

标签: ruby-on-rails activerecord

我有战斗类,有很多参与者。我正在使用这个类方法返回最后一场投票:

def self.get_voteable_battle
  #return the battle whose submissions_deadline ended less than 3 days ago
  time_now = Time.now
  end_of_day = time_now.end_of_day
  return self.where(:submissions_deadline => end_of_day.ago(3.days)..time_now).first
end

但我也想确保至少有2名参与者。

我可以添加另一个这样的条件:

def self.get_voteable_battle
  #return the battle whose submissions_deadline ended less than 3 days ago
  time_now = Time.now
  end_of_day = time_now.end_of_day
  battle = self.where(:submissions_deadline => end_of_day.ago(3.days)..time_now).first
  if battle && battle.participants.count > 1
    return battle
  else
    return nil
  end
end

但这需要另一个查询吗?有没有办法在使用活动记录的一个查询中执行此操作?

1 个答案:

答案 0 :(得分:0)

你可以尝试

self.joins(:participants).where(:submissions_deadline => end_of_day.ago(3.days)..time_now).having('count(participants.id) > ?', 1).last

它可能是having子句中的战斗ID,但其中一个会起作用,我会更新。头疼了。