2014-02-11 77 views
0

我有跟蹤的多少票在一個月如何在每月月底計算領先

[<Placement id: 1, employee_id: 1, month: "2014-02-01", votes: 2>, 
<Placement id: 2, employee_id: 1, month: "2014-01-01", votes: 2>, 
<Placement id: 3, employee_id: 2, month: "2014-02-01", votes: 1>, 
<Placement id: 4, employee_id: 2, month: "2014-01-01", votes: 3> 
<Placement id: 5, employee_id: 3, month: "2014-02-01", votes: 9>] 

我現在想跟蹤他們在什麼位置獲得僱員表每月月底(大多數投票位置1等)。

我要添加列:位置到展示位置的模型,像這樣:

[<Placement id: 1, employee_id: 1, month: "2014-02-01", votes: 2, position: 2>, 
<Placement id: 2, employee_id: 1, month: "2014-01-01", votes: 2, position: 2>, 
<Placement id: 3, employee_id: 2, month: "2014-02-01", votes: 1, position: 3>, 
<Placement id: 4, employee_id: 2, month: "2014-01-01", votes: 3, position: 1> 
<Placement id: 5, employee_id: 3, month: "2014-02-01", votes: 9, position: 1>] 

我在Heroku的調度程序是這樣的:

if Date.today == Date.today.end_of_month 
Placement.each_with_index do |p, index| 
    p.update_attributes(position: index+1) 
end 
end 

我如何比較選票從所有相同的月份?與此相比,所有月份

+0

你可以用cron工作來做到這一點。 –

+0

這個'職位'系統如何工作?根據什麼是一個位置計算?爲什麼在一個月內只有一名員工有多個條目?爲什麼會有多個職位(id 4和5的職位1)?我只想添加一張表格,其中包含一個月後的投票位置和總數。但很多將取決於這實際工作的細節。 –

+0

一個月內有多名員工在哪裏工作? – grabury

回答

2

要在單月運行和更新位置,你可以:

def update_single_month(month) 
    Placement.where(month: month).order('votes desc').each_with_index do |placement, position| 
    placement.position = position 
    placement.save! 
    end 
end 

要在現有的所有數據上運行,你需要簡單的知道這幾個月裏,你已經有了數據:

def update_all_months 
    Placement.select(:month).group(:month).each { |r| update_single_month(r.month) } 
end 
+0

愛你的工作! – grabury