def parse_data_if_not_null
unless self.date_string.blank?
begin
self.ends_at = DateTime.strptime(self.date_string, '%m/%d/%Y %H:%M').utc
rescue ArgumentError
errors.add(:date_string, _("Wrong date format, example: MM/DD/YYYY HH/MM"))
end
end
end
def validate_less_today
begin
if (DateTime.strptime(self.date_string, '%m/%d/%Y %H:%M') < DateTime.now)
errors.add(:date_string, "must be current or future date")
end
rescue ArgumentError
errors.add(:date_string, _("Wrong date format, example: MM/DD/YYYY HH/MM"))
end
end
答案 0 :(得分:0)
您如何看待这种方法?
def merged_method
unless self.date_string.blank?
begin
self.ends_at = DateTime.strptime(self.date_string, '%m/%d/%Y %H:%M').utc
if self.ends_at < DateTime.now
errors.add(:date_string, "must be current or future date")
end
end
rescue ArgumentError
errors.add(:date_string, _("Wrong date format, example: MM/DD/YYYY HH/MM"))
end
end
end
答案 1 :(得分:0)
这两种方法的使用方式不同。我认为重构这个的最好方法是添加一个解析字符串的方法。
def parse_data_if_not_null
return if date_string.blank?
date = parse_date(date_string)
return unless date
self.ends_at = date.utc
end
def validate_less_today
date = parse_date(date_string)
return if !date || date < DateTime.now
errors.add(:date_string, "must be current or future date")
end
def parse_date(string)
DateTime.strptime(self.date_string, '%m/%d/%Y %H:%M')
rescue ArgumentError
errors.add(:date_string, _("Wrong date format, example: MM/DD/YYYY HH/MM"))
nil
end