我正在使用 Rails 3.0。对于模型的 updated_at
列,我需要将其输出为 JSON 中的用户友好格式,而不是将此 2011-09-14T22:01:32Z
视为值,我想为 updated_at
显示不到一分钟前
(或我决定的任何用户友好的消息)。我编写了一个以用户友好格式返回输出的方法,现在需要该功能在 View 、 Controller 和模型中可用。执行此操作的最佳方法是什么,这样它就不会令人费解或成为不好的做法。
编辑 根据@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
效果很好。谢谢!
最佳答案
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
关于ruby-on-rails - 使 View 、 Controller 和模型可以访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424675/