답변:
pluck
db 수준에 있습니다. 특정 필드 만 쿼리합니다. 이것을보십시오 .
당신이 할 때 :
User.first.gifts.collect(&:id)
모든 필드가로드 된 개체가 id
있으며 Enumerable 기반 메서드 덕분에 간단히 얻을 수 있습니다.
그래서:
Rails 4 에만 필요한 경우 다음을 id
사용하십시오 ids
.User.first.gifts.ids
Rails 4에서 일부 필드 만 필요한 경우 다음을 사용하십시오 pluck
.User.first.gifts.pluck(:id, :name, ...)
Rails 3에 하나의 필드 만 필요한 경우 다음을 사용하십시오 pluck
.User.first.gifts.pluck(:id)
모든 필드 가 필요한 경우collect
Rails 4에서 일부 필드가 필요한 경우 여전히 pluck
Rails 3에서 일부 필드가 필요한 경우 select
및collect
pluck
여러 필드를 보내고, 3하지 않습니다 레일 당신은 사용하지 않는 라이언 페브르의 해결 방법
예. 레일 가이드에 따르면 , pluck
직접으로 데이터베이스 결과를 변환 array
구성하지 않고, ActiveRecord
객체. 이는 대규모 또는 자주 실행되는 쿼리에 대해 더 나은 성능을 의미합니다.
@apneadiving의 답변 외에도 pluck
단일 및 다중 열 이름을 인수로 사용할 수 있습니다.
Client.pluck(:id, :name)
# SELECT clients.id, clients.name FROM clients
# => [[1, 'David'], [2, 'Jeremy'], [3, 'Jose']]
검색된 레코드의 속성을 거의 사용하지 않는 경우가 있습니다. 이러한 경우 pluck
.
User.collect(&:email)
위의 예에서 메모리와 시간을 낭비하는 것보다 이메일 속성 만 필요한 경우. 데이터베이스의 사용자 테이블에서 모든 열을 검색하기 때문에 각 속성 (사용하지 않을 속성 포함)에 대한 메모리를 할당합니다.
참고 : pluck
사용자의 ActiveRecord_Relation을 반환하지 않습니다 .
pluck
같은 여러 속성과 함께 사용할 수pluck(:id, :name)
없습니까?