我在Rails 3.0上。对于模型的updated_at
列,我需要将其输出为JSON中的用户友好格式,因此我不想将此2011-09-14T22:01:32Z
视为值,而是希望显示less than a minute ago
(或其他我决定用户友好的消息updated_at
。我编写了一个方法,以用户友好的格式返回输出,现在需要在视图,控制器和模型中提供功能。这样做的最佳方式是什么,所以这不是错综复杂或不好的做法。
编辑来自@klochner的回答,这是我date.rb
的样子,但现在它抛出date.rb:21:in
格式':错误的参数数量(2为0)(ArgumentError )`
include ActionView::Helpers::DateHelper
class ActiveSupport::TimeWithZone
def friendly
format
end
end
class Date
def friendly
format
end
end
class Time
def friendly
format
end
end
def format
if self.today?
format_time = ...
elsif (self < Time.now.beginning_of_day) and (self > Time.now.yesterday.beginning_of_day)
format_time = ...
else
format_time = ...
end
end
@klochner建议将format
更改为format_helper
效果很好。谢谢!
答案 0 :(得分:2)
MonkeyPatch ActiveSupport::TimeWithZone
类,这就是我所做的(我把它放在config/initializers/date.rb
中)
class ActiveSupport::TimeWithZone
def mdy
self.strftime("%m/%d/%Y")
end
end
class Date
def mdy
self.strftime("%m/%d/%Y")
end
end
class Time
def mdy
self.strftime("%m/%d/%Y")
end
end
然后,对于任何日期对象(或AR模型中的日期字段),您可以调用mdy()
:
> Time.now.mdy
=> "09/14/2011"
> User.first.created_at.mdy
=> "02/27/2009"
> Date.today.mdy
=> "09/14/2011"
对于json,您可能希望为要渲染的模型编写as_json
方法。看到这个相关的答案:
render :json does not accept options