Model.ids 和 Model.select(:id).map(&:id) 之间的区别



我一直在试图找到 rails 如何处理对Model.ids and 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是首选。

通常,直接或间接使用的.pluck不会加载active_record模型。 .select确实如此。 .where.order设计自动包括数据库SELECT调用。

最新更新