我有一个 View 将日期时间打印为 #{@event.starts_at.strftime("%m/%d/%Y %H:%M")}。所以每次打印starts_at 时,我都必须在 View 中使用strftime。我需要找到一种方法将方法添加到我的“事件”模型中,以便每次打印 event.starts_at 或 event.method_name(starts_at) 时都会自动格式化日期
最佳答案
您可以像下面这样覆盖 getter:
class Event < ActiveRecord::Base
def starts_at
attributes['starts_at'].strftime("%m/%d/%Y %H:%M")
end
end
考虑到您必须对属性哈希使用字符串而不是符号。
这么说,如果您的应用程序尝试国际化,这会锁定您,因为时间格式因地区而异
您可以使用 Rails I18n:
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'
有了它,你可以使用:
> I18n.localize Event.first.starts_at, format: :very_short
# => "26.11.2012, 10:35 Uhr"
localize
方法别名为 I18n.l
它将使用正确的(如果已定义)
关于ruby-on-rails - 在 Rails 中的模型中格式化日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600995/