我有一张桌子
create table foos
(
id int,
bar varchar(1),
var int
)
和相应的模型类
class Foo < ApplicationRecord
self.table_name = "foos"
end
我按如下所示直接用ruby控制台./script/rails console
填写表格
Foo.new(:id => 1, :bar => "x", :var => 2).save
Foo.new(:id => 2, :bar => "y", :var => 2).save
Foo.new(:id => 3, :bar => "z", :var => 3).save
如果我用Foo.all
打印记录,我会得到此订单
#<ActiveRecord::Relation [
#<Foo id: 1, bar: "x", var: 2>,
#<Foo id: 2, bar: "y", var: 2>,
#<Foo id: 3, bar: "z", var: 3>]>
如果我在数据库上查询select * from foos
,则会得到相同的订单
id bar var
-------------
1 x 2
2 y 2
3 z 3
然后,我将每个记录bar
为var
的列2
的值为a
Foo.where(:var => 2).update_all(:bar => "a")
如果我再次打印出记录,我会得到另一个订单
#<ActiveRecord::Relation [
#<Foo id: 3, bar: "z", var: 3>,
#<Foo id: 1, bar: "a", var: 2>,
#<Foo id: 2, bar: "a", var: 2>]>
如果我在数据库上查询select * from foos
id bar var
-------------
3 z 3
1 a 2
2 a 2
如果我按照说明更新记录,是否可以保留原始顺序?
答案 0 :(得分:1)
您想要的是通过其ID order
记录:
Foo.order(id: :asc)
答案 1 :(得分:0)
当您更新数据库中的字段时,取决于数据库配置,顺序为“较旧”字段,最后一个为“较年轻”字段,如果您在数据库中添加时间戳,则会对其进行查看。然后,如果要在sql中订购,则应使用“ order”,然后使用要订购的字段。
Foo.order(id: :asc)
Foo.order(id: :desc)