Rails中的复杂SQL

时间:2011-03-15 17:57:33

标签: ruby-on-rails ruby-on-rails-3

如何使用活动记录形成以下查询?

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 个答案:

答案 0 :(得分: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分析输出

答案 1 :(得分:0)

看看这个Railscast。有很多方法可以做同样优雅的esp。解决您的[和另一个可能的条件]问题。如果未在Railscast中建议,请查看Squeel gem。