使用等式来获取不是“零”的数组。

时间:2013-05-13 21:24:06

标签: ruby ruby-on-rails-3.2

我试图以数组的形式从我的数据库中收集数据,因此我使用inject方法获取持续时间属性的总和。但是,我无法得到一个整数数组,因为持续时间是一个函数,而不是一个值。但我不知道如何将它保存为一个值,当它取决于一系列日期。以下是我尝试过的内容:

在控制台中:

oldman = Employee.first

好的,所以持续时间在这里工作..

oldman.furlough.first.duration
=> 1

在这里......

oldman.furlough.last.duration
=> 4

但是当我尝试使用' all'得到一个数组...

oldman.furlough.all.duration
=> NoMethodError: undefined method `duration' for #<Array:0x007fd75651c3d8>

所以我试过......

oldman.furloughs.all(:select => :duration).collect(&:id)
=> [nil, nil]

和...

oldman.furloughs.pluck(:duration)
=> [nil, nil]

它们都会带回我想要的格式,而不是信息。

这是具有持续时间等式的Furloughs模型:

class Furlough < ActiveRecord::Base
  belongs_to :employee

  def only_weekdays(range)
    range.select { |d| (1..5).include?(d.wday) }.size    
  end

  def psb_holidays
    Holidays.between(date_from, date_to, :us, :observed).size
  end

  def duration
    (only_weekdays(date_from..date_to) - psb_holidays)
  end
end

1 个答案:

答案 0 :(得分:0)

在Dave的帮助下,我发现这个有用:

Employee.first.furloughs.collect(&:duration)

在我的Furlough模型中,我有一个新方法定义如下:

def vacation_days_used
  self.furloughs.collect(&:duration).inject(0) { | memo, n | memo + n } 
end

这给了我每个员工休假的单独金额。