Where to put methods that do simple date formatting
I have two models, BusinessHour and StaffHour that both inherit from Hour.
In the BusinessHour and StaffHour models I do a 'find' to retrieve requested hours. After that I need to format each time to a specific format, which I have a method for. I'm trying to figure out where to put that method. It sort of seems like it would go in a H开发者_运维问答elper in which case I would need to call the it from the both the BusinessHour and StaffHour controllers AFTER they call the model to retrieve the data.
Otherwise I can put the formatting method in the Hour model, and call it right from within the BusinessHour and StaffHour models since they both inherit from Hour.
What's the recommended way?
Here's the method:
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
You can define custom formats of to_s for dates and times. Create a .rb file in config/initializers with something such as the following:
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)
Then you can call to_s with any of the formats you've created. Like so:
time = Time.now
time.to_s(:short_full_year)
If you've defined your custom time format as Jared says, your format_hours_for_display
method is merely grouping hours by day. Rails has a nice group_by
method that you could probably use, something like this:
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
精彩评论