Rails ActiveRecord_Relation 没有实例化

syutran · 2021年03月21日 · 最后由 lyb124553153 回复于 2021年03月26日 · 454 次阅读

我相对查询出来的数据集重新排序,才发现数据集并没有实例化,而是一条 SQL 查询。

@people = Person.where( alive: true )

# 如果你能看懂 @people = Person.find(1).root.subtree(to_depth: 10) 你就知道为什么要重新排序而不在抓数据时就排好序

@people.order( :name ) 我想重排序,白搭,没这个方法

@people.insert([name: " Tom ", ... ]) 

白搭,不知道这个 ActiveRecord_Relation 是个什么鬼 ,如果是个查询结果集,为什么不让插入数据?

后来发现,@people.each 时,也会一条一条地从数据库里重新抓数据,WC~

现在我想在结果集里插入数据,不想搞临时表什么的,我也想把结果集重新排序,我有什么办法吗?

ActiveRecord::Relation 是个惰性执行的 sql,执行 to_a 或其他 Enumerable 方法时才会真正执行 sql。如果它是结果集的话,怕是不太好实现链式查询。

在结果集里插入数据再排序,试试转成数组再在内存里手动处理。

如果想要提前加载数据 可以调用 load 方法 https://github.com/rails/rails/blob/5aaaa1630ae9a71b3c3ecc4dc46074d678c08d67/activerecord/lib/active_record/relation.rb#L636

如果想要结果集,可以用 records 方法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号