【发布时间】:2019-10-04 18:14:03
【问题描述】:
我正在尝试深入到数组嵌套哈希的迭代中的每个值,并将所有 nil 值替换为“无”或 0 之类的值。请查看我的代码,该代码显然不起作用。在将它传递给 Rails 中的视图进行迭代和渲染之前,我需要解决这个问题:
我的控制器:
def show
results = Record.get_record(params[:trans_uuid])
if !results.empty?
record = results.map { |res| res.attributes.symbolize_keys }
@record = Record.replace_nil(record) # this calls method in Model
else
flash[:error] = 'No record found'
end
end
我的模特:
def self.replace_nil(record)
record.each do |r|
r.values == nil ? "None" : r.values
end
end
record 在传递给模型方法self.replace_nil(record 时看起来像这样:
[{:id=>1, :time_inserted=>Wed, 03 Apr 2019 15:41:06 UTC +00:00, :time_modified=>nil, :request_state=>"NY", :trans_uuid=>"fe27813c-561c-11e9-9284-0282b642e944", :sent_to_state=>-1, :completed=>-1, :record_found=>-1, :retry_flag=>-1, :chargeable=>-1, :note=>"", :bridge_resultcode=>"xxxx", :bridge_charges=>-1}]
【问题讨论】:
-
我不确定这样做的原因,但听起来你可以在视图上为零时处理这种情况(可能是视图助手)。您正在控制器上格式化值,听起来像是属于视图的东西(例如,您可以执行
@record[:time_modified] || 'None') -
.each应该只在你只想要副作用而不关心返回值的情况下使用。就像在每次迭代都打印到缓冲区的视图中一样。 -
正如@arieljuod 所说,很高兴看到您在这里遇到的情况,也许有更简单的方法。
-
对于一个数组,你可以这样做:
my_array.map{ |value| value || "None" }
标签: ruby-on-rails ruby hash null