Ruby on rails 如何按时间订购

Ruby on rails 如何按时间订购,ruby-on-rails,postgresql,time,Ruby On Rails,Postgresql,Time,我的数据库中有列(字符串类型)(postgres)=>“时间” 我想按“时间”点菜,但不行 我通过以下方式获取所有数据: @results.order(:time).all; 我的清单是这样的 1:00:12 31:31 45:12 51:33 我怎么能点这个?也许可以在postgres中通过在rails中使用cast the column或gsub来实现?有人有想法吗?在rails中存储时间的正确方法是使用时间格式。i、 e: create_table :results do |t|

我的数据库中有列(字符串类型)(postgres)=>“时间” 我想按“时间”点菜,但不行

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

@results.order(:time).all;
我的清单是这样的

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

我怎么能点这个?也许可以在postgres中通过在rails中使用cast the column或gsub来实现?有人有想法吗?

在rails中存储时间的正确方法是使用时间格式。i、 e:

create_table :results do |t|
  t.time :name_of_attributes
end
然后,您可以通过以下方式轻松排序:

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

编辑:

正如@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
#将以下方法添加到“结果”模型中:
解析时间
res=0
time.split(“:”).reverse.each_with_index do | val,index|
res+=val.to_i*(60**索引)
结束
物件
结束
#然后对它进行排序
@结果.all.sort_按do | a,b|
a、 解析时间
结束

我要澄清的是,第二种方法并不可取,因为它可能较慢。

在rails中存储时间的正确方法是使用时间格式。i、 e:

create_table :results do |t|
  t.time :name_of_attributes
end
然后,您可以通过以下方式轻松排序:

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

编辑:

正如@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
#将以下方法添加到“结果”模型中:
解析时间
res=0
time.split(“:”).reverse.each_with_index do | val,index|
res+=val.to_i*(60**索引)
结束
物件
结束
#然后对它进行排序
@结果.all.sort_按do | a,b|
a、 解析时间
结束

我要澄清的是,第二种方法不是首选方法,因为它可能比较慢。

它可以工作,您的结果排序正确。列类型是
string
-因此它的顺序是这样的。它可以工作,您的结果排序正确。列类型是
string
,因此它的顺序是这样的。可能是OP使用
string
作为类型的原因吧?我想他只是不知道
时间
类型的存在可能是OP使用
string
作为类型的原因吧?我想他只是不知道
时间
类型存在