2014-05-15 2 views
0

이 두 가지 방법 중 하나를 병합할지 말해주십시오. 그리고 반복없이?하나의 두 가지 방법의 합병

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

이 방법에 대해 어떻게 생각하십니까?

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 
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 
관련 문제