我有一个rails应用程序,我想根据消息到达的时间向用户显示消息(消息)
每条消息(Message)都有一个名为created_at
的属性 例如,- 20分钟前 ----- MESSAGE1 -----消息2
- 1小时前 ----- MESSAGE3 -----消息4 ----- MESSAGE5
- 2天前 ----- message6
依此类推。
我怎么能用rails做到这一点?
我正在使用rails 3 b.t.w
答案 0 :(得分:1)
你基本上有两种选择。第一种是使用内置的Rails助手time_ago_in_words
:
# in your views
<%= time_ago_in_words(message.created_at) %>
您可以在Rails documentation中了解有关此帮助程序的更多信息。
这样做的缺点是它只适用于视图,而且可能不是完全正确的格式。如果是这种情况,您始终可以在初始化程序中定义自己的帮助程序。这是我为旧应用程序编写的一种方法,您应该能够根据自己的要求进行修改:
class ActiveSupport::TimeWithZone
def how_long_ago
seconds = (Time.now - self)
# Keep adding days, weeks, months, years if necessary--same principle should apply
if seconds > 3600
(seconds / 3600).to_i.to_s + "h " + (seconds % 3600 / 60).to_i.to_s + "m"
elsif seconds > 60
(seconds / 60).to_i.to_s + "m " + (seconds % 60).to_i.to_s + "s"
else
seconds.to_i.to_s + "s"
end
end
end
Message.first.created_at.how_long_ago # => 3m 52s
要根据此分组数据,您可以在消息数组上使用group_by
方法。
答案 1 :(得分:0)
您可以在消息模型中设置默认范围:
default_scope order('messages.created_at DESC')
答案 2 :(得分:0)
我在RailsCasts上找到了一个完美满足我需求的答案