两种方法合并为一体

时间:2014-05-15 01:25:13

标签: ruby-on-rails ruby-on-rails-4

请告诉我这两种方法是否合并为一种。没有重复?

  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

2 个答案:

答案 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