2015-06-24 134 views
1

我有一个属性quarter,我保存为字符串形式 - "2015-1",这意味着2015年和第一季度。基于年份和季度的日期范围

如何获得此quarter内所有日期的范围?

我需要将其纳入验证:

validates :date, 
    presence: true, 
    inclusion: { in: something_that_returns_the_range_from_quarter_attr } 
+0

我有点困惑。你想验证'季度'attr? – caspg

+0

我不知道。我需要验证称为'date'的属性。这个日期应该包含在一个值范围内,这些值是从'quarter'属性获得的(不知何故)。 –

回答

1

我会做这样的:

#i would do the validation like so 
validates :date_in_quarter 

def date_in_quarter 
    if self.date.blank? || !self.quarter_date_range.include?(self.date) 
    self.errors.add(:date, "is blank or not in allowed range") 
    end 
end 

#the validation uses this method which gets date range from quarter attribute 
def quarter_date_range 
    year, quarter = self.quarter.split("-").collect(&:to_i) 
    start_month = ((3 * quarter) - 2) 
    start_date = Date.parse("#{year}-#{start_month}-01") 
    end_date = start_date + 3.months - 1.day 
    start_date..end_date 
end 
+0

我会接受,谢谢! –

+0

只需在'quarter_date_range'方法中修复丢失的开放括号即可。 :) –

相关问题