2011-03-15 48 views
2

如何使用活動記錄構成以下查詢?Rails中的複雜SQL代碼

SELECT c.* 
FROM `course_enrollments` ce JOIN courses c ON ce.course_id = c.id 
WHERE ce.created_at 
BETWEEN '2000-01-01' and '2012-01-01' [AND ANOTHER POSSIBLE CONDITION] 
GROUP BY c.id 

我希望能夠做一些事情,如:(我知道下面是不正確的,但我只是想表明一個普通的例子)

courses = Course.joins(:course_enrollments).where('course_enrollments.created_at' => params[:start_date]..params[:end_date]).group('courses.id') 

if some_condition 
    courses = courses.where(:some_field => 1) 
end 

回答

2

下面應該讓你在方式

Course.joins(:course_enrolements). 
where("course_enrolements.created_at between '2000-01-01' and '2012-01-01'"). 
group("courses.id"). 
where(MORE CONDITIONS) 

使用.to_sql分析輸出

+0

如果它們是可變的,則是 - 否則,否則:where(「course_enrollments.created_at between?和?」,params [:start_date],params [:end_date]) –

+0

。除非需要,否則我不使用綁定變量。 –

0

看看這個Railscast。有相當多的方法來做同樣優雅的esp。以解決你的[和另一個可能的條件]的擔憂。如果沒有在Railscast中提出,也可以看看Squeel寶石。