我有一个客户,她想要看到她的员工的报告,按他们上一个职位的日期分组(date_in_position)。她希望将它们分组:不到1年,1-3年,3-5年,以及5年以上。我创建了一个小方法来返回一个可用于group_by方法的字符串,但只有“小于1年”才能正常工作。其他一切都显示为超过5年。
def dip_range
case self.date_in_position
when 1.year.ago...Date.today
'< 1 year'
when 3.years.ago...(1.year.ago + 1)
'1-3 years'
when 5.years.ago...(3.years.ago + 1)
'3-5 years'
else
'> 5 years'
end
end发布于 2011-07-13 02:28:55
另一种方法是:
def dip_range
case
when self.date_in_position.between?(1.year.ago,Date.today)
'< 1 year'
when self.date_in_position.between?(3.years.ago,(1.year.ago + 1))
'1-3 years'
when self.date_in_position.between?(5.years.ago,(3.years.ago + 1))
'3-5 years'
else
'> 5 years'
end
end发布于 2011-07-13 02:23:15
在R1.8 (Time..Date)范围内根本不能工作,而且我无论如何都会重写这段代码:
# self is not required by the way
case (Date.today - date_in_position) / 365.2425
when (0...1)
'< 1 year'
when (1...3)
'< 3 years'
when (3...5)
'< 5 years'
else
'> 5 year'
end或者甚至是:
years = (Date.today - date_in_position) / 365.2425
case
when years < 1
'< 1 year'
when years < 3
'< 3 years'
when years < 5
'< 5 years'
else
'> 5 year'
end发布于 2011-07-13 02:08:38
Integer#years.ago返回一个DateTime,它没有正确地与您正在打开的Date对象进行比较。我不太确定为什么会这样,但如果你改变
case self.date_in_positionto case self.date_in_position.to_datetime
这段代码适用于大多数情况。
此外,您的边界是不正确的。如果某人在1年前的今天开始工作,他们应该显示为1-3年,对吗?所以:
def dip_range
case self.date_in_position
when (1.year.ago+1.day).to_date..Date.today
'< 1 year'
when (3.years.ago+1.day).to_date..1.year.ago.to_date
'1-3 years'
when (5.years.ago.to_date+1.day).to_date..3.years.ago.to_date
'3-5 years'
else
'> 5 years'
end
endhttps://stackoverflow.com/questions/6668707
复制相似问题