簡體   English   中英

如何在 ruby​​ on rails 中用 n/a 替換空值?

[英]How can I replace null value with n/a in ruby on rails?

我是新來的。希望你能理解我的問題。 我正在研究通過 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"]

我認為你可以在很多層面上做到這一點,所以取決於你需要什么。 解決此問題的一種方法是在數據庫中設置默認值。 所以每次你的模型用 null 保存時,它實際上會被保存為“n\\a”。

您可以像這樣運行遷移:

change_column_default :rosters, :caste_group, "n\a"

但也許您不想編輯數據庫中的所有數據。 在這種情況下,您可以在模型或演示者級別執行此操作。 我認為您從助手發布的代碼沒問題。 你不滿意嗎?

我謝天謝地解決了這個問題。 我的問題是我已經將數據庫更新為“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 }

我發布答案是因為它將來可能對其他人有幫助。

如果您的查詢可以返回空值和“”,例如

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"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM