首页 > 解决方案 > 如何在 Ruby 中使用 nil 检查在一行中迭代 ActiveRecord 结果集

问题描述

我有一个 Active Record 结果数组,我想遍历每条记录以获取特定属性并将所有这些属性添加到一行中并进行 nil 检查。这是我到目前为止得到的

def total_cost(cost_rec)
    total= 0.0
    unless cost_rec.nil?
      cost_rec.each { |c| total += c.cost }
    end
    total
  end

有没有一种优雅的方法可以在一行中做同样的事情?

标签: ruby-on-railsrubyone-liner

解决方案


像这些吗?

def total_cost(cost_rec)
  (cost_rec || []).inject(0) { |memo, c| memo + c.cost }
end

或者

def total_cost(cost_rec)
  (cost_rec || []).sum(&:cost)
end

推荐阅读