Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按日期分组和显示_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on 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应用程序,我想根据消息到达的时间向用户显示消息

每个消息(message)都有一个名为created_at的属性

比如说 --20分钟前 -----信息1 -----信息2

--一小时前 -----信息3 -----信息4 -----信息5

--两天前 -----信息6

等等等等

如何使用rails实现这一点


我使用的是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