2016-02-05 44 views
0

我試圖找到這在谷歌在這裏,但似乎我不能在這裏找到一個像樣的答案的問題 我想我想是我需要得到的總和到週日的總小時,每天從週一顯示這樣please check this image如何按日期組和紅寶石總結在軌道上

和我模式的是這樣的

class Staff < ActiveRecord::Base 
    has_many :task_logs 
end 

class Client < ActiveRecord::Base 
    has_many :task_logs 
end 

class TaskLog < ActiveRecord::Base 
belongs_to :staff 
belongs_to :client 
end 

和我控制器

@hrs_staff_by_client = TaskLog.joins(:staff).joins(:client).joins(:user).select("staffs.full_name AS full_names").select("staffs.position AS positions").select("clients.full_name AS client_names").select("users.email AS emails").select("clients.*, SUM(task_logs.total_hrs) AS today").group("staffs.id, users.id, clients.id") 
+0

用戶和TaskLog之間的關係是什麼? TaskLog只有一天的設計嗎? – max

+0

用戶有很多任務日誌 –

+0

您應該編輯您的問題,以便讀者可以看到。 – max

回答

0

理想情況下,我們將集團由TaskLog星期幾的名稱的數據:

Staff 
    .joins(:task_logs) 
    .group("GROUP BY to_char(task_logs.created_at, 'dy'), staffs.id") 
    .select("SUM(task_logs.total_hrs) AS sum_total_hrs, staffs.id AS staff_id, to_char(task_logs.created_at, 'dy') AS day_string") 

上述查詢的結果將是:(例如)

sum_total_hrs | staff_id | day_string 
---------------+----------+----------- 
     50  |  1 | fri 
     45  |  1 | sat 
     20  |  2 | sat 

從以上結果您可以再次加入Staff和其他表格以獲得您需要的所有列,例如:

temp_sql = Staff 
     .joins(task_logs) 
     .group("GROUP BY to_char(task_logs.created_at, 'dy'), staffs.id") 
     .select('SUM(task_logs.total_hrs) AS sum_total_hrs, staffs.id AS staff_id, to_char(task_logs.created_at, 'dy') AS day_string').to_sql 

Staff.joins(task_logs: :client) 
    .joins("JOIN (#{temp_sql}) AS temp ON temp.staff_id = staffs.id") 
+0

結果應該是這樣的 全名|位置|客戶名稱|時間本週工作|週一週二\t \t Wednsday \t週四週五\t週六\t週日\t –