差异

2017-05-26 103 views
0

我一直在试图找到如何处理的轨道调用Model.ids and Model.select(:id).map(&:id)差异

当我尝试执行在同一控制台我看到了差距

Model.ids不加载的Active Record模式

然而,Model.select(:ID).MAP(&:ID),加载的活动记录模式。

任何人都可以请分享到什么时候Rails会加载活动记录模型,什么时候没有。

另外,加载活动记录模型有没有优点/缺点优势,反之亦然。

回答

2

Model.ids相当于

Model.pluck(:id) 

而且是快速的方法作为数据库返回数组你。

Model.select(:id) 

...返回表行(Model对象),但只有:id属性,让你再使用#map方法来获取:id阵列。

Model.select(:id).map(&:id) 

如此,因为创建对象,然后需要由#map处理的活动记录关系,这是低效率的。因为Model.ids是优选的。

通常,直接或间接使用的.pluck不会加载active_record模型。 .select呢。 .where.order由设计自动包含db SELECT调用。

+0

感谢您的回答史蒂夫,你可以让我知道,有什么额外的方法,我们直接从数据库中得到回应?我们如何识别这些方法。你能指点我一些文档吗? –

+0

这是一个很好的指南,并显示每个ActiveRecord命令的SQL等效项。 http://guides.rubyonrails.org/active_record_querying.html – SteveTurczyn