Ruby on rails Model.id和Model.select(:id).map(&;:id)之间的差异

Ruby on rails Model.id和Model.select(:id).map(&;:id)之间的差异,ruby-on-rails,activerecord,rails-activerecord,Ruby On Rails,Activerecord,Rails Activerecord,我一直在试图找到rails如何处理对Model.ids和Model.select(:id).map(&:id) 当我尝试在控制台中执行相同的操作时,我看到了不同之处 Model.ids不加载活动记录模型 但是,Model.select(:id).map(&:id)将加载活动记录模型 任何人都可以分享Rails何时加载活动记录模型,何时不加载。 另外,加载活动记录模型是否有任何优点/缺点,反之亦然。model.ids等同于 Model.pluck(:id) 并且是数据库为您返回数组时速度更快的方

我一直在试图找到rails如何处理对
Model.ids和Model.select(:id).map(&:id)

当我尝试在控制台中执行相同的操作时,我看到了不同之处

Model.ids不加载活动记录模型

但是,Model.select(:id).map(&:id)将加载活动记录模型

任何人都可以分享Rails何时加载活动记录模型,何时不加载。


另外,加载活动记录模型是否有任何优点/缺点,反之亦然。

model.ids
等同于

Model.pluck(:id)
并且是数据库为您返回数组时速度更快的方法

Model.select(:id)
…返回表行(模型对象),但仅使用
:id
属性,因此您可以使用
#map
方法获取
:id
数组

Model.select(:id).map(&:id)
因此,由于这会创建对象的活动记录关系,然后需要由
#map
处理,因此效率较低

因此首选
Model.ids


通常,直接或间接使用的
.pull
不会加载活动的\u记录模型<代码>。选择does
。其中
和。订单按设计自动包括db
选择
调用。

型号。ids
等同于

Model.pluck(:id)
并且是数据库为您返回数组时速度更快的方法

Model.select(:id)
…返回表行(模型对象),但仅使用
:id
属性,因此您可以使用
#map
方法获取
:id
数组

Model.select(:id).map(&:id)
因此,由于这会创建对象的活动记录关系,然后需要由
#map
处理,因此效率较低

因此首选
Model.ids


通常,直接或间接使用的
.pull
不会加载活动的\u记录模型<代码>。选择does
.where
.order
按设计自动包括db
选择
呼叫。

感谢您的回答steve,您能告诉我,我们直接从数据库获得响应的其他方法有哪些吗?我们如何识别这些方法。你能给我指一些文档吗?这是一个很好的指南,并显示了每个ActiveRecord命令的SQL等价物。谢谢你的回答,史蒂夫,你能让我知道,我们直接从数据库获得响应的其他方法是什么吗?我们如何识别这些方法。你能给我指一些文档吗?这是一个很好的指南,并显示了每个ActiveRecord命令的SQL等价物。