我一直在试图找到 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
调用。