如何按时间排序

时间:2015-04-13 14:07:05

标签: ruby-on-rails postgresql time

我的数据库中有列(字符串类型)(postgres)=> "时间" 我希望通过" time"但它没有用。

我通过以下方式获取所有数据:

@results.order(:time).all;

我的列表看起来像这样

1:00:12
31:31
45:12
51:33

我该如何订购?也许可以在postgres中通过强制转换列或gsub在rails中进行吗?有人有想法吗?

1 个答案:

答案 0 :(得分:4)

在rails中存储时间内容的正确方法是使用时间格式。即:

create_table :results do |t|
  t.time :name_of_attributes
end

然后您可以通过以下方式轻松排序:

@results.all.order(:time => :asc)

参考:http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

编辑:

正如@Vucko所建议的那样,提问者可能希望将其格式化为数据库中的字符串。在这种情况下,添加一些相关方法应该不会太难:

# Add the following method to the `Result` model:

def parse_time
  res = 0
  time.split(":").reverse.each_with_index do |val, index|
    res += val.to_i * (60 ** index)
  end
  res
end

# Then to sort it
@results.all.sort_by do |a, b|
  a.parse_time <=> b.parse_time
end

我应该澄清第二种方法不是首选方法,因为它可能会更慢。