我正在嘗試在 Rails 7 中創建以下 HTML 表:
| 12月20日 | 12月21日 | |
|---|---|---|
| 專案1 | 2 | 4 |
| 專案2 | 3 | 5 |
資料以標準化方式存盤:
| 日期 | 物品 | 價值 |
|---|---|---|
| 12月20日 | 專案1 | 2 |
| 12月21日 | 專案1 | 4 |
這似乎是一個相當簡單的用例,但我還沒有找到一個很好的示例或工具來解釋如何在控制器或 HTML 中執行此操作。這些文章給出了部分解釋: 如何使用 group_by 在單個共享日期下對事件物件進行分組 我如何根據日期對內容進行分組(Rails) 任何指導將不勝感激。特別是如果有一個類似于 Chartkick 的工具可以自動執行此程序。謝謝你。
uj5u.com熱心網友回復:
我發現在控制器中進行作業可以使視圖變得不那么復雜:
假設您的 company_facts 模型具有以下結構:
"id" integer
"cat_id" references category (id)
"date" of type date
"name" string (which is the "item")
"value" number (to be displayed in the table)
控制器:
def index
@cf = company.company_facts.where(cat_id: cat_id)
@dates = @cf.map(&:date).uniq.sort
@items = @cf.map(&:name).uniq.sort
@hash = Hash.new(0)
@cf.each_with_object(@hash) {|obj,hsh| hsh[ [obj.date, obj.name] ] = obj.value}
end
查看(我更喜歡 HAML ...希望您可以使用它):
%table
%tr
%td
- @dates.each do |date|
%th= date
- @items.each do |item|
%tr
%th= item
- @dates.each do |date|
%td= number_with_delimiter( @hash[ [date, item] ] )
上面最復雜的一點是創建散列,使用一個鍵,該鍵是日期和專案標簽的組合陣列。您可以在不創建散列的情況下執行上述所有操作,方法是針對每個條目對資料庫執行查找,但是如果您有大量資料要繪制,您會發現創建散列的Hash速度明顯更快且影響更小。
通過使用Hash.new,如果沒有匹配,我們還指定默認回傳值。
從您的示例中我不知道在哪里設定company和cat_id設定,因此您需要確保該邏輯也進入您的控制器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510044.html
標籤:轨道上的红宝石红宝石
