我一直试图找到rails处理 {user1: "a", user2: "b"},
{user1: "a", user2: "c"},
{user1: "b", user2: "d"},
{user1: "b", user2: "c"},
{user1: "b", user2: "e"},
{user1: "c", user2: "f"}
当我尝试在控制台中执行相同操作时,我会看到差异
Model.ids不加载活动记录模型
但是,Model.select(:id).map(&:id)会加载活动记录模型。
任何人都可以分享Rails何时加载活动记录模型以及何时不加载。
此外,加载活动记录模型是否具有任何优点/缺点,反之亦然。
答案 0 :(得分:2)
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
会自动包含db SELECT
调用。