[PT-BR] pluck vs. select
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 (또는 배열의 배열) | Array |
select | ActiveRecord 레코드 집합 | ActiveRecord::Relation (모델 객체) |
두 메서드 모두 동일한 SQL을 생성합니다:
SELECT "doctors"."id", "doctors"."updated_at" FROM "doctors"
차이점은 반환되는 데이터 형식에 있습니다. pluck은 순수 값만 반환하고, select는 모델 인스턴스를 반환하므로 인스턴스 메서드와 연관 관계에 접근할 수 있습니다.