簡體   English   中英

如何在可枚舉的 object 中用 Ruby/Rails 中的“None”替換 nil 和“空字符串”?

[英]How to replace nil and 'empty string' with “None” in Ruby/Rails in enumerable object?

我正在使用 Rails 中的對象:Record::ActiveRecord_Relation 和 ActionController::Parameters 並將它們轉換為可用的哈希值,以便在視圖中呈現。 我需要將 nil 和 "" 替換為 "none"。 我可以用非干的方式來保護 Hash 的每個鍵/值對,例如:

  <div><%= @records_incoming[:time_inserted] || @records_incoming[:time_inserted].empty? ? "none" : @records_incoming[:time_inserted]  %></div>

但這似乎不太像 Ruby (當然,我是新開發人員)。

我試圖在 controller 中處理這個問題,如下所示:


def show
    sent_results = Record.get_sent(params[:request][:trans_uuid]) 

    if !sent_results.empty? 

      incoming_request = params[:request].permit!
      @records_sent = sent_results[0].attributes.each { |k,v| v.class == String && v.empty? || !v ? sent_results[0].attributes[k] = "none" : sent_results[0].attributes[k] } 
      @records_incoming = incoming_request.to_h.map { |k, v| v.empty? || !v ? "none" : v }
      byebug 
    else    
      flash[:error] = 'No record found'
    end 
  end

但這不會將 nil 和空字符串值更改為“無”。 如果我使用map ,我當然會得到一個數組作為返回值,但我需要保留一個 Hash。

請就總體上更好的 Rails 方法提出建議。 試圖將 2 個哈希值放入要拆分和渲染的視圖中。

您可以嘗試使用presence

<%= @records_incoming[:time_inserted].presence || "none" %>

它處理您需要的兩種情況, @records_incoming[:time_inserted]為 nil 或空字符串,因為它返回接收器(如果present? .

您可以使用transform_values! 在參數 hash

嘗試,

incoming_request.transform_values! { |v| v.empty? || !v ? "none" : v }
@records_incoming = incoming_request

參考: transform_values! 文檔

注意: transform_values! 更新 hash 到位

暫無
暫無

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

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