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

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

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

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

,但是看起来不像Ruby(准,我是新开发人员)。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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个散列放入视图中以进行拆分和渲染。


您可以尝试使用presence

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

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


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

尝试,

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

参考:transform_values! doc

注意:transform_values!在适当位置更新哈希