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)
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)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With