我正在尝试在控制器中对用户进行排序,我想按ID号对它们进行排序。我的问题是,rails在创建时会自动为订单分配一个id,还是我需要在我的控制器中的create action中将它添加到create function中?例如,我可以这样说:
def index
@users = User.all.order(:WHAT TO PUT HERE???????)
end
我会把:id放在空间吗?如果我这样做了,我是否需要在其他地方定义id或者这是ruby在后端做的事情?
答案 0 :(得分:2)
在大多数情况下,Rails会返回按id排序的记录。但是你不应该依赖Rails,因为排序是特定于数据库的。
要按ID显式添加排序,您应该使用:
def index
@users = User.order(:id)
end
ID会自动添加,您无需在任何地方声明。
答案 1 :(得分:2)
Rails只能帮助您通过迁移创建表。当迁移创建表时,它会自动将id列添加为设置为自动增量的主键。那么为什么你创建记录它实际上是添加id的数据库,或者如上所述,它自动从最后一个id增加+1。因此,当您使用ActiveRecord创建记录时,您不需要指定ID。
现在提出您的主要问题:如果要按该列进行升序排序,可以将列的名称传递给order
方法。您不需要拨打all
。
所以就这样做:
User.order(:id)
这将从较低的ID到较高的ID。做相反的事情:
User.order("id DESC")
这将首先通过从较高的ID到较低的ID进行排序来提供最近创建的记录。
答案 2 :(得分:1)
如果要按ID分类用户
@users = User.order(:id) #ASC default
@users = User.order('id ASC') #ASC explicit
@users = User.order('id DESC') #DESC explicit
答案 3 :(得分:0)
......永远不要忘记User.order('-id')
一元减号捷径......