Ruby on rails 按ID号排序数组

Ruby on rails 按ID号排序数组,ruby-on-rails,sorting,controllers,Ruby On Rails,Sorting,Controllers,我的数据库有“脊椎编号”,我想按它们排序 @films = Film.all.sort{|a,b| a.id <=> b.id } @films=Film.all.sort{| a,b | a.id b.id} 这是我的一个控制器,但脊椎去1,2,3。。。100、101等,而不是001002003。。。所以分类是不正常的。这可能有一个简单的类,比如: @films = Film.all.sort{|a,b| a.id.abs <=> b.id.abs } @film

我的数据库有“脊椎编号”,我想按它们排序

@films = Film.all.sort{|a,b| a.id <=> b.id }
@films=Film.all.sort{| a,b | a.id b.id}
这是我的一个控制器,但脊椎去1,2,3。。。100、101等,而不是001002003。。。所以分类是不正常的。这可能有一个简单的类,比如:

@films = Film.all.sort{|a,b| a.id.abs <=> b.id.abs }
@films=Film.all.sort{| a,b | a.id.abs b.id.abs}
但我不知道。谢谢你的帮助


另外,为什么rails wiki最近经常宕机?

您应该使用Film.order(“id DESC”)(或“ASC”)方法,将SQL order BY子句应用于查询。 默认情况下,至少在MySQL中,记录是按主键列排序的

如果这还没有回答您的问题,请提供有关数据库的更多信息

已编辑 是的,我明白了。我想到的唯一一件事是,您正在为spine Number列使用某种字符串数据类型。在这种情况下,这种排序是有意义的,因为值是按如下方式逐字符进行比较的

1| |
0|5|4
2|5|
1|4|3
哪个会回来

  • 054
  • 一,
  • 143
  • 二十五
而整数或浮点等数值则是按实际值进行比较,而不是按单独的字节进行比较


因此,您应该创建一个迁移,将脊椎编号的数据类型更改为整数。

您应该使用Film.order(“id DESC”)(或“ASC”)方法,该方法将SQL order BY子句应用于查询。 默认情况下,至少在MySQL中,记录是按主键列排序的

如果这还没有回答您的问题,请提供有关数据库的更多信息

已编辑 是的,我明白了。我想到的唯一一件事是,您正在为spine Number列使用某种字符串数据类型。在这种情况下,这种排序是有意义的,因为值是按如下方式逐字符进行比较的

1| |
0|5|4
2|5|
1|4|3
哪个会回来

  • 054
  • 一,
  • 143
  • 二十五
而整数或浮点等数值则是按实际值进行比较,而不是按单独的字节进行比较


因此,您应该创建一个迁移,将脊椎编号的数据类型更改为整数。

您可以发布排序结果以及schema.rb中的“films”表定义吗?您这样排序有什么原因吗?如果没有,请使用@bassneck的回答。您可以发布排序结果以及schema.rb中的“films”表定义吗?您这样排序有什么原因吗?如果没有,请使用@bassneck的回答我使用的是默认的sqlite3数据库。这是链接。如您所见,它将最新更新的电影排在列表的底部。我想知道我是否可以按脊椎编号而不是主键排序,即使脊椎编号前面没有零。嗯。。。正如我所看到的,你的主键是脊椎编号。无论如何,order方法允许您根据任何列对数据进行排序。Film.order(“spine ASC”)将返回顶部脊椎编号最低、底部脊椎编号最高的行,您现在明白我关于排序的意思了吗?它是如何不按我想要的顺序读取的,因为脊椎编号没有前面的零,即001,002I正在使用默认的sqlite3数据库。这是链接。如您所见,它将最新更新的电影排在列表的底部。我想知道我是否可以按脊椎编号而不是主键排序,即使脊椎编号前面没有零。嗯。。。正如我所看到的,你的主键是脊椎编号。无论如何,order方法允许您根据任何列对数据进行排序。Film.order(“spine ASC”)将返回顶部脊椎编号最低、底部脊椎编号最高的行,您现在明白我关于排序的意思了吗?因为脊椎编号没有前面的零,所以它是如何不按我想要的顺序读取的,即001、002