[我正在使用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个散列放入视图中以进行拆分和渲染。
您可以尝试使用presence
。
<%= @records_incoming[:time_inserted].presence || "none" %>
它处理您需要的两种情况,@records_incoming[:time_inserted]
为零或空字符串,因为如果它是present?
,它将返回接收者。
您可以在参数哈希上使用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!
更新哈希值就位