반응형
단일 열의 값을 배열로 가져 오는 방법
지금은 단일 데이터 열을 선택하기 위해 다음과 같은 작업을 수행하고 있습니다.
points = Post.find_by_sql("select point from posts")
그런 다음 메서드에 전달하면 메서드가 불가지론 적으로 유지되고 이제 메서드 내에서 hash.point를 호출해야합니다. 이것을 배열로 신속하게 변환하고 데이터 세트를 내 메소드로 전달하는 방법 또는 더 나은 방법이 있습니까?
Rails 3.2에는이를위한 pluck 메소드 가 있습니다.
다음과 같이 :
Person.pluck(:id) # SELECT people.id FROM people
Person.pluck(:role).uniq # unique roles from array of people
Person.distinct.pluck(:role) # SELECT DISTINCT role FROM people SQL
Person.where(:confirmed => true).limit(5).pluck(:id)
pluck
@alony가 제안한 방법을 사용해야합니다 . Rails 3.2 이전에 멈춘 경우 ActiveRecord select
메서드를 다음과 함께 사용할 수 있습니다 Array#map
.
Post.select(:point).map(&:point)
#=> ["foo", "bar", "baz"]
.map{|x| x.title}
하지만 Ruby 1.9 이전 Symbol#to_proc
에는 (단항 &
연산자에 의해 별칭이 지정됨 ) 이전 버전의 Ruby에서 정의되지 않았기 때문에 해야 합니다.
select_values의 정의가 보이면 'map (& : field_name)'을 사용합니다.
def select_values(arel, name = nil)
result = select_rows(to_sql(arel), name)
result.map { |v| v[0] }
end
배열의 모든 필드 값을 수집하는 일반적인 Rails 방법은 다음과 같습니다.
points = Post.all(:select => 'point').map(&:point)
points = Post.all.collect {|p| p.point}
참고 URL : https://stackoverflow.com/questions/9869870/how-to-get-a-single-columns-values-into-an-array
반응형
'Program Tip' 카테고리의 다른 글
모든 SQL 쿼리 기록 (0) | 2020.10.13 |
---|---|
다운로드 할 phpexcel (0) | 2020.10.13 |
Lombok의 @ Slf4j 및 Intellij로 빌드 : 기호 로그를 찾을 수 없습니다. (0) | 2020.10.13 |
디렉토리에서 모든 .gz 압축을 풀고 삭제합니다.-Linux (0) | 2020.10.13 |
Django-Admin : CharField as TextArea (0) | 2020.10.13 |