Rails如何在这种特定情况下使用join?

时间:2012-09-13 13:15:00

标签: ruby-on-rails activerecord join

我有三个模型,每个都是这样连接的:Groups有许多Students,其中有许多Absences

Absences有一个名为created_on的字段。

我只有群组ID ,并希望获得今天缺席的所有学生

我在Student模型中创建了此方法:

# Inside student.rb

def self.absent_today_in_group (group)
 #SQLITE
 find(:all, :joins => :absences, :conditions => ["STRFTIME('%d', created_on) = ? AND STRFTIME('%m', created_on) = ?", Date.today.day, Date.today.month])

 #POSTGRES
 #find(:all, :joins => :absences, :conditions => ["EXTRACT(DAY FROM created_on) = ? AND EXTRACT(MONTH FROM created_on) = ?", Date.today.day, Date.today.month])
end

为什么该查询不会返回任何内容?那么我怎么能检查group_id?

2 个答案:

答案 0 :(得分:3)

您使用的是哪种版本的导轨?您可以在rails 3中执行此操作:

def self.absent_today_in_group(group)
  joins(:absences, :group).where(
    'absences.created_on' => (Time.now.beginning_of_day..Time.now.end_of_day),
    'groups.id' => group.id
  )
end

这会找到今天因特定群体而缺席的所有用户。

答案 1 :(得分:0)

不应该是:在哪里,不是:条件?