Ruby on rails 按日期分组和显示
我有一个rails应用程序,我想根据消息到达的时间向用户显示消息 每个消息(message)都有一个名为created_at的属性 比如说 --20分钟前 -----信息1 -----信息2 --一小时前 -----信息3 -----信息4 -----信息5 --两天前 -----信息6 等等等等 如何使用rails实现这一点Ruby on rails 按日期分组和显示,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个rails应用程序,我想根据消息到达的时间向用户显示消息 每个消息(message)都有一个名为created_at的属性 比如说 --20分钟前 -----信息1 -----信息2 --一小时前 -----信息3 -----信息4 -----信息5 --两天前 -----信息6 等等等等 如何使用rails实现这一点 我使用的是rails 3 b.t.w您可以在消息模型中设置默认范围: default_scope order('messages.created_at DESC') 我
我使用的是rails 3 b.t.w您可以在消息模型中设置默认范围:
default_scope order('messages.created_at DESC')
我找到了一个适合我需要的关于铁路运输的答案
您基本上有两种选择。第一种方法是使用内置的Rails助手
time\u ago\u in\u words
:
# in your views
<%= time_ago_in_words(message.created_at) %>
要基于此对数据进行分组,可以使用messages数组上的
group\u by
方法。这将按照我想要的顺序对消息进行排序,但如何根据日期对标题进行分组。例如,一天前(ms1,ms2)两天前(ms3,ms4)
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