Q:

Format datetime in model in rails

I have a view which prints the date time as #{@event.starts_at.strftime("%m/%d/%Y %H:%M")}. So everytime I print starts_at, I have to use strftime in the view. I need to find a way to add a method to my 'event' model, so that the date gets formatted automatically everytime I print event.starts_at or event.method_name(starts_at) 

A:

You can override the getter like follows:
class Event < ActiveRecord::Base
  def starts_at
    attributes['starts_at'].strftime("%m/%d/%Y %H:%M")
  end
end

Take into account that you have to use a string and not a symbol for the attributes hash.
Said this, this locks you if your app tries to get internationalized, as time formats are different depending on the locales
You could use the rails I18n for it:
de.yml
de:
  time:
    formats: 
      default: '%A, %d. %B %Y, %H:%M Uhr'
      long: '%A, %d. %B %Y, %H:%M Uhr'
      short: '%d. %B, %H:%M Uhr'
      very_short: '%d.%m.%Y, %H:%M Uhr'

With that you could use:
> I18n.localize Event.first.starts_at, format: :very_short
# => "26.11.2012, 10:35 Uhr"

The localize method is aliased to I18n.l
and it will use the right one (if defined)

A:

You can add method, but it will pollute model with view related logic. Best way is to create decorator for this purposes, if you are new with decorators then you can add it to model.
def starts_at_format format = "%m/%d/%Y %H:%M"
   starts_at.strftime(format)
end

Now you can use starts_at_format and it will automatically format the date 
format has default value so if ever later need to use other format just pass the argument.
You can this use as:
   starts_at_format

or
   starts_at_format("%m %d %b") # define format

