2014-02-19 106 views
2

我有一个投票模型和一个放置模型,用于跟踪每个月末员工在投票结束时完成的位置。如何从where语句订购结果

投票模式

create_table "votes", :force => true do |t| 
t.integer "phone_id", :limit => 8 
t.integer "employee_id" 
t.integer "score" 
end 

安置模式

create_table "placements", :force => true do |t| 
t.integer "employee_id" 
t.date  "month" 
t.integer "votes_count", :default => 0 
t.integer "position" 
t.integer "total_score", :default => 0 
end 

我可以检索的最多票数顺序展示位置特定月份这样的:

business.placements.where(month: month).order('votes_count desc') 

我想要得到的按平均分数排序(而不是大多数选票)。

平均分数可以像这样制定出:

average_score = placement.total_score/placement.votes_count 

我怎么会为了我在那里通过AVERAGE_SCORE声明?

+0

你就不能添加的平均分十进制领域,有一个之前保存的位置,然后按该字段排序? –

+0

你有没有试过“Order BY votes_count DESC”? – Rene

+0

@Baloo我可以但我认为这可能是浪费存储的一些方法。但我认为你可能是对的。 – grabury

回答

0

这是一个有点长镜头,但尽量

business.placements.where(month: month).select('placements.*, (placements.total_score/placements.votes_count) AS average_score').order('average_score') 
2

试试这个

business.placements.where(month: month).order('total_score/votes_count desc') 
+1

此回应有效。只是在本地进行测试我建议你将这个平均值保存在数据库中,然后通过它来排序,如果你使用这个选择的话。 –