2012-09-13 61 views
0

我有三个模型,每个连接如下:Groups其中有许多Students其中有许多AbsencesRails如何在这种特定情况下使用连接?

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?

+0

日志告诉你关于生成的SQL查询的内容是什么? – Atastor

回答

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 

这会查找所有用于今天给定组的用户。

+0

谢谢!我正在使用Rails3,现在它可以在开发SQlite的工作中使用,它是否可以用于PostGres(在heroku上)? – LouwHopley

+0

是的,它应该工作。它不包含任何自定义SQL。 –

+0

顺便说一句,它始终是一种很好的做法,可以将您的开发环境与您的开发环境相匹配(如果可能的话)。所以,在你的本地机器上安装postgres并使用它开发是个好主意。 –

0

不应该这样:where和not:conditions?

+0

如果我交换这两个,我得到一个'未知的键:哪里错误 – LouwHopley

+0

Yepp ..我的错,对不起!我通常使用方法的语法,然后它的.where([...]) – Atastor