ActiveRecord 모델 또는 Enumerables에서 단일 값 추출
pluck
라는 훌륭하고 표현적인 용어가 있습니다. ActiveRecord 모델에서 이것을 사용하여 하나(또는 몇 개)의 열을 반환할 수 있습니다.그러나 일반 old
Enumerables
에서 동일한 방법을 사용하여 주어진 키에 응답하는 모든 값을 추출할 수도 있습니다.용법
Rails에서
pluck
를 사용하여 열의 하위 집합을 쿼리합니다.Shoe.all.map(&:name)
# SELECT "shoes.*" from "shoes"
# => ["Air Force 1", "NMD_2", "Air Jordans", ...]
# This returns an array with all shoe names, but our database query pulled down all of the columns on the `shoes` table
Shoe.pluck(:name)
# SELECT "shoes.name" from "shoes"
# => ["Air Force 1", "NMD_2", "Air Jordans", ...]
# Same result, but we only query exactly the columns we wanted
Shoe.pluck(:name, :brand)
# SELECT "shoes"."name", "shoes"."brand" FROM "shoes"
# => [["Air Jordan 1 Mid", "Nike"], ["Air Jordan 1 Mid", "Nike"], ... ]
Shoe.distinct.pluck(:brand)
# SELECT DISTINCT "shoes"."brand" FROM "shoes"
# => ["Nike", "Adidas", ...]
pluck
를 사용할 때 Enumerables
를 ActiveSupport
와 함께 사용할 수도 있습니다.[
{ id: 1, name: "David" },
{ id: 2, name: "Rafael" },
{ id: 3, name: "Aaron" }
].pluck(:name)
# => ["David", "Rafael", "Aaron"]
Enumerable
버전은 외부 API의 JSON 데이터를 처리할 때 특히 편리합니다.require "httparty"
require "active_support"
require "active_support/core_ext"
response = HTTParty.get('http://api.stackexchange.com/2.2/questions?site=stackoverflow')
questions = JSON.parse(response.body)["items"]
questions.pluck("title")
# => [
# "JavaScript to Python - Interpreting JavasScript .filter() to a Python user",
# "Nuxt generate and firebase gives timer warning",
# "Variable expected error when I increment the value of a map",
# ...
# ]
pluck
는 해시와 함께 가장 자주 사용되지만 일반 Ruby 객체 또는 구조체를 포함하여 전달하는 메시지에 응답하는 모든 객체와 함께 사용할 수 있습니다.다음에 단일 값을 얻기 위해
map
를 호출하는 경우 pluck
로 전환하여 코드를 개선할 수 있는지 확인하십시오.추가 리소스
Rails API 문서: ActiveRecord#pluck
Rails API 문서: Enumerable#pluck
Reference
이 문제에 관하여(ActiveRecord 모델 또는 Enumerables에서 단일 값 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swanson/pluck-single-values-out-of-activerecord-models-or-enumerables-2gjc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)