在哪里放置简单日期格式的方法

时间:2010-02-24 01:59:56

标签: ruby-on-rails ruby model-view-controller architecture

我有两个模型,BusinessHour和StaffHour都继承了Hour。

在BusinessHour和StaffHour模型中,我执行“查找”以检索请求的小时数。之后我需要将每次格式化为特定格式,我有一个方法。 我正在试图找出放置该方法的位置。它似乎会出现在Helper中,在这种情况下,我需要在BusinessHour和StaffHour控制器调用模型来检索数据之后调用它。

否则我可以将格式化方法放在Hour模型中,并在BusinessHour和StaffHour模型中调用它,因为它们都从Hour继承。

推荐的方式是什么?

以下是方法:

  def self.format_hours_for_display(hours)
    hours_for_day = Hash.new("")
    hours.each do |h|
      h.start_time  = format_time(h.start_time)
      h.stop_time   = format_time(h.stop_time)
      hours_for_day[h.day] = h
    end  
    hours_for_day
  end

2 个答案:

答案 0 :(得分:4)

您可以为日期和时间定义to_s的自定义格式。在config / initializers中使用以下内容创建.rb文件:

formats = {:short_full_year => '%m/%d/%Y', :short_datetime => '%m/%d/%Y %I:%M%p'}

Date::DATE_FORMATS.update(formats)
Time::DATE_FORMATS.update(formats)

然后,您可以使用您创建的任何格式调用to_s。像这样:

time = Time.now
time.to_s(:short_full_year)

答案 1 :(得分:0)

如果您已按照Jared的说法定义了自定义时间格式,则format_hours_for_display方法仅仅是按小时分组。 Rails有一个很好的group_by方法,你可以使用它,如下所示:

hours.group_by(&:day).each do |day, h|
  puts h.start_time.to_s(:custom_format)
  puts h.stop_time.to_s(:custom_format)
end