[PT-BR] pluck 对比 select

发布: (2026年5月1日 GMT+8 11:24)
2 分钟阅读
原文: Dev.to

Source: Dev.to

pluck

在 Rails 中,我们有 pluck,它返回一个包含所选属性值的数组。

Doctor.pluck(:id)
#=> [1, 3, 7, 8, 9, 5]

如果传入多个属性,pluck 会返回一个数组的数组,每个子数组包含请求的属性值:

Doctor.pluck(:id, :updated_at)
#=> [
#     [1, Wed, 23 Jan 2019 11:44:27.924159000 EST -05:00],
#     [3, Tue, 29 Jan 2019 15:47:30.056920000 EST -05:00],
#     [7, Thu, 28 May 2020 19:30:29.238601000 EDT -04:00],
#     [8, Thu, 28 May 2020 19:30:29.251257000 EDT -04:00],
#     [9, Sat, 26 Jun 2021 19:56:41.536687000 EDT -04:00],
#     [5, Tue, 28 Jun 2022 16:49:45.091360000 EDT -04:00]
#   ]

生成的查询仅 检索 指定的属性:

SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

select

select 执行相同的 SQL 查询,但返回一个包含模型对象的 ActiveRecord::Relation

Doctor.select(:id, :updated_at)
#=> #<ActiveRecord::Relation [...]>

查询日志示例:

Doctor.select(:id, :updated_at)
#   Doctor Load (0.3ms)  SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

比较

方法返回值对象类型
pluck数组(或数组的数组)Array
selectActiveRecord 记录集合ActiveRecord::Relation(模型实例)

两者生成相同的 SQL 查询:

SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"

区别在于返回数据的格式:pluck 只返回纯值,而 select 返回完整的模型实例,因而可以访问实例方法和关联。

0 浏览
Back to Blog

相关文章

阅读更多 »

我觉得 Ruby 不够动态…

介绍 诚然,这更像是个人随笔,而不是技术文章。过去几年里,我已经成为了 Crystal 的信徒之一。Loo...