0

我正在尝试以数组的形式从我的数据库中收集数据,所以我使用该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
4

1 回答 1

0

在戴夫的帮助下,我发现这是可行的:

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

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

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

这给了我每个员工休假的单独总和。

于 2013-05-13T22:21:22.390 回答