我要使用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个散列放入视图中以进行拆分和渲染。
答案 0 :(得分:2)
您可以尝试使用presence
。
<%= @records_incoming[:time_inserted].presence || "none" %>
它处理您需要的两种情况,@records_incoming[:time_inserted]
为nil或空字符串,因为它是present?
时返回接收者。
答案 1 :(得分: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!
将哈希值原位更新