如何使用Rails 3 finders方法重写此SQL查询?

时间:2012-09-04 21:50:55

标签: sql ruby-on-rails activerecord

我想重写这个SQL查询:

SELECT p.id, p.name, p.gender, (p.work_done/p.work_total * 100) r1, (p.work_success/p.work_total * 100) r2, p.StartTime, p.EndTime 
FROM Persons p 
WHERE p.id= params[:id] 
AND p.gender = params[:gender]
ORDER BY r1 desc
GROUP BY p.gender

使用最新的rails 3 finder方法(例如where, select, group, order ....)

我尝试了这个,但它不起作用:

@list = Persons.select("id, name, gender, (work_done/work_total * 100) r1, (work_success/work_total * 100) r2, StartTime, EndTime").where("id = ? AND gender = ?", params[:id],  params[:gender]).order("r1 desc").group("name")

知道我做错了吗?

编辑: 以前我用过这个:

@list = Persons.find_by_sql("same sql code above").group_by {|t| t.name}

在我看来:

<% @list.each do |person, person_list| %>

...

它有效,但是当我尝试使用finder方法时,它说:

(undefined method `each' for nil:NilClass)

在查询数据库时给我这个错误:

Completed 500 Internal Server Error in 280ms

1 个答案:

答案 0 :(得分:0)

这有用吗?

@list = Persons.select("id, name, gender, (work_done/work_total * 100) r1, (work_success/work_total * 100) r2, StartTime, EndTime").where("testrun_id = ? AND gender = ?", params[:id],  params[:gender]).order("r1 desc").group("gender")