2017-02-10 185 views
0

我有一個Ruby/Rails視圖,其中 - 員工姓名將顯示在Y軸(左側)和週日期頂部從星期天開始到星期六結束周。循環訪問數據 - Ruby

  '2017-02-05' '2017-02-06' '2017-02-07' '2017-02-08' '2017-02-09' '2017-02-10' '2017-02-11' 

Employee_1  7            3    4.5 

Employee_2      4    6.2    0.5       10.5 

當我從數據庫中提取細節時,數據將在下面的表格中。日期格式爲YYYY-MM-DD

@data = 
    {"Employee_1"=> 
     [{"week_date"=>"2017-02-05", 
     "log_time"=>"7"}, 
     {"week_date"=>"2017-02-08", 
     "log_time"=>"3"}, 
     {"week_date"=>"2017-02-09", 
     "log_time"=>"4.5"}], 
    "Employee_2"=> 
     [{"week_date"=>"2017-02-06", 
     "log_time"=>"4"}, 
     {"week_date"=>"2017-02-07", 
     "log_time"=>"6.2"}, 
     {"week_date"=>"2017-02-08", 
     "log_time"=>"0.5"}, 
     {"week_date"=>"2017-02-10", 
     "log_time"=>"10.5"}] 
    } 

另外,我們有一個包含工作日的數組:

@week_days = ["2017-02-05", "2017-02-06", "2017-02-07", "2017-02-08", "2017-02-09", "2017-02-10", "2017-02-11"] 

哪有我只是循環對於該數據是可用的,並跳過其餘日期,這種結構和顯示數據視圖中HTML表格結構的日期?

+0

你已經試過了什麼? – mudasobwa

+0

我可以展示的東西並不多。我只能打印員工姓名,我們可以在每個的第一個​​上顯示。但是連續顯示其他TD的數據似乎有點棘手..我們必須與週日期匹配,並且如果數據可用,則在相應的TD中顯示它,如果不留空白。 –

+0

您可以遍歷ERB視圖中的數據。你可以循環兩次,如果它使表寫入容器(一次爲一次,再次爲TD) –

回答

3

讓我們從準備步驟開始。我們需要一個stub周天後,我們會作爲支架以後使用原始數據:

stub = @week_days.map { |wd| {wd => ""} }.reduce(&:merge) 

和原始數據的減速器:

reducer = ->(v) { 
    v.map { |h| {h["week_date"] => h["log_time"]} }.reduce(&:merge) 
} 

OK,我們都是集。

@data.map { |k, v| [k, stub.merge(reducer.(v))] }.to_h 
#⇒ { 
# "Employee_1" => { 
# "2017-02-05" => "7", 
# "2017-02-06" => "", 
# "2017-02-07" => "", 
# "2017-02-08" => "3", 
# "2017-02-09" => "4.5", 
# "2017-02-10" => "", 
# "2017-02-11" => "" 
# }, 
# "Employee_2" => { 
# "2017-02-05" => "", 
# "2017-02-06" => "4", 
# "2017-02-07" => "6.2", 
# "2017-02-08" => "0.5", 
# "2017-02-09" => "", 
# "2017-02-10" => "10.5", 
# "2017-02-11" => "" 
# } 
# } 

現在只需重複上述和打印值。