如何在可枚举对象的Ruby / Rails中将nil和'空字符串'替换为“ None”?

问题描述 投票:0回答:1

[我正在使用Rails中的对象:一个Record :: ActiveRecord_Relation和一个ActionController :: Parameters,并将它们转换为可用的哈希,以在视图中呈现。我需要将nil和“”替换为“ none”。我可以通过非干燥方式来实现,并使用类似以下方法来保护哈希的每个键/值对:

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

但是这看起来与Ruby不太相似(当然,我是新开发人员)。

我试图像这样在控制器中处理此问题:


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和空字符串值更改为'none'。如果我使用map,我当然会得到一个数组作为返回值,但是我需要保留一个Hash。

请总体上建议任何更好的Rails方法。尝试将2个散列放入视图中以进行拆分和渲染。

ruby-on-rails ruby activerecord hash enums
1个回答
0
投票

您可以尝试使用presence

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

它处理您需要的两种情况,@records_incoming[:time_inserted]为零或空字符串,因为如果它是present?,它将返回接收者。


0
投票

您可以在参数哈希上使用transform_values!

尝试,

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

参考:https://apidock.com/rails/Hash/transform_values%21

注意:transform_values!更新哈希值就位

© www.soinside.com 2019 - 2024. All rights reserved.