我试图以数组的形式从我的数据库中收集数据,因此我使用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
答案 0 :(得分:0)
在Dave的帮助下,我发现这个有用:
Employee.first.furloughs.collect(&:duration)
在我的Furlough
模型中,我有一个新方法定义如下:
def vacation_days_used
self.furloughs.collect(&:duration).inject(0) { | memo, n | memo + n }
end
这给了我每个员工休假的单独金额。