ActiveRecord 모델 또는 Enumerables에서 단일 값 추출

5302 단어 webdevrailsruby
Rails에는 레코드에서 데이터의 하위 집합을 가져올 수 있는 pluck라는 훌륭하고 표현적인 용어가 있습니다. ActiveRecord 모델에서 이것을 사용하여 하나(또는 몇 개)의 열을 반환할 수 있습니다.

그러나 일반 oldEnumerables에서 동일한 방법을 사용하여 주어진 키에 응답하는 모든 값을 추출할 수도 있습니다.

용법



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를 사용할 때 EnumerablesActiveSupport와 함께 사용할 수도 있습니다.

[
  { 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

좋은 웹페이지 즐겨찾기