我是新來的。希望你能理解我的問題。我正在研究通過 rails 中的 chartkick 和 chart.js 創建的動態圖表。
從控制臺顯示的資料由空資料組成。
資料為空不是問題。問題是我想將 null/empty 顯示為 n/a。 我的圖表看起來像 為了解決這個問題,我首先通過下面提到的代碼更新資料庫:
Roster.where(caste_group: "").update_all(caste_group:"n/a")
但這恰恰不是我想要的。每次更新資料庫效率不高。然后我使用了轉換鍵助手。代碼如下
caste_group = Roster.group(:caste_group).count
@caste_group = caste_group.transform_keys{ |key| key==""?
"n/a":key }
這里的名冊是由以下屬性 caste_group 作為字串和用戶選擇 caste_group 作為下拉串列的模型。使用這個轉換鍵助手我得到了不顯示空值的結果。null/空值不會重命名為 n/a。我在視圖中的代碼如下
= line_chart @event_chart,discrete:true, legend: "bottom",curve: false,
colors: ["#67b55e","#d43766","#729be0"]
uj5u.com熱心網友回復:
我認為你可以在很多層面上做到這一點,所以取決于你需要什么。解決此問題的一種方法是在資料庫中設定默認值。所以每次你的模型用 null 保存時,它實際上會被保存為“n\a”。
您可以像這樣運行遷移:
change_column_default :rosters, :caste_group, "n\a"
但也許您不想編輯資料庫中的所有資料。在這種情況下,您可以在模型或演示者級別執行此操作。我認為您從助手發布的代碼沒問題。你不滿意嗎?
uj5u.com熱心網友回復:
我謝天謝地解決了這個問題。我的問題是我已經將資料庫更新為“n/a”。因此,當我通過 transform_keys 更改密鑰時,我遇到了問題。之后,我將 n/a 重命名為“N/A”并為我解決。
caste_group = Roster.group(:caste_group).count
@caste_group = caste_group.transform_keys{ |key| key==""? "N/A":key }
我發布答案是因為它將來可能對其他人有幫助。
uj5u.com熱心網友回復:
如果您的查詢可以回傳空值和“”,例如
Roster.group(:caste_group).count
{
nil=>12,
''=>123,
'name_first'=>2
}
這可以幫助
sql = <<-SQL
SELECT
CASE
WHEN caste_group IS NULL
THEN 'n/a'
WHEN caste_group=''
THEN 'n/a'
ELSE caste_group
END AS caste_group,
count(*)
FROM rosters
GROUP BY 1
SQL
result = ActiveRecord::Base.connection.execute(sql).to_a
這會將 NULL 或 '' 編譯為 'n/a'。
示例結果:
[
{"caste_group"=>"n/a", "count"=>"1"},
{"caste_group"=>"name_first", "count"=>"2"}
]
接下來,您可以將其轉換為所需的哈希值。
result.each_with_object({}) { |caste_group, res| res[caste_group['caste_group']] = caste_group['count'] }
例如
{"n/a"=>"1", "name_first"=>"2"}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329018.html
