복붙노트

[RUBY-ON-RAILS] 레일 : 나는 열에서 고유 한 값을 얻을 수있는 방법

RUBY-ON-RAILS

레일 : 나는 열에서 고유 한 값을 얻을 수있는 방법

어떻게 테이블의 열에서 고유 값을받을 수 있나요? 예를 들어,이 제품 테이블이 있습니다 :

ID NAME CATEGORY
1 name1 1st_cat
2 name2 2nd_cat
3 name3 1st_cat

여기에 단지 2 값 싶어 - 1st_cat 및 2nd_cat를 :

<%Products.each do |p|%>
<%=p.category%>
<%end%>

해결법

  1. ==============================

    1.두 더 많은 방법 :

    두 더 많은 방법 :

    Product.select(:category).map(&:category).uniq # Ruby does the work
    
    Product.uniq.pluck(:category) # DB does the work (superior)
    

    레일> = 5.1 사용 :

    Product.distinct.pluck(:category) # DB does the work (superior)
    

    ... 관계 #의 UNIQ는 사용되지 않습니다 때문이다.

  2. ==============================

    2.나는 당신이 할 수 있다고 생각 :

    나는 당신이 할 수 있다고 생각 :

    <% Products.select("DISTINCT(CATEGORY)").each do |p| %>
    <%= p.category %>
    <% end %>
    

    출처 : http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

  3. ==============================

    3.이 데이터베이스 서버에서 모든 작업을 수행합니다. 결과는 간단한 배열이다.

    이 데이터베이스 서버에서 모든 작업을 수행합니다. 결과는 간단한 배열이다.

    <% Product.distinct(:category).pluck(:category).each do |category|
        <%= category %>
    <% end %>
    

    레일은 SQL을 생성하는 모든 데이터베이스에 작업 (포스트 그레스, MySQL은, 등).

    SELECT DISTINCT "products"."category" FROM "products"
    
  4. ==============================

    4.(: 카테고리) 나는 Products.all.distinct.pluck를 사용하는 것이 좋습니다 UNIQ 레일 5부터 사용되지 않습니다 때문에 그것은 레일 5.1에 제거됩니다

    (: 카테고리) 나는 Products.all.distinct.pluck를 사용하는 것이 좋습니다 UNIQ 레일 5부터 사용되지 않습니다 때문에 그것은 레일 5.1에 제거됩니다

  5. ==============================

    5.합니다 (콘솔 레일에서)이 시도

    합니다 (콘솔 레일에서)이 시도

    Product.group(:category)
    
    Product.group(:category).each { |p| p.name }
    
  6. ==============================

    6.포스트 그레스의 경우

    포스트 그레스의 경우

    <% Product.select("DISTINCT ON (category) *").each do |category|
        <%= category %>
        <%= name %>
    <% end %>
    

    더 나은

    <% Product.select(%(DISTINCT ON (category) "#{Product.table_name}".*)).each do |category|
        <%= category %>
        <%= name %>
    <% end %>
    

    당신이 결합 할 때 잘못된 열을 반환 할 수 있기 때문에 (예를 들어 제품을 조인 된 테이블에서 id 컬럼을 반환하지만하지 않음)

  7. ==============================

    7.고유의 출력을 얻기 위해 필요하고 실패 하 'UNIQ'방법을 시도하고 있었다. 시도 몇 가지 솔루션은 실패 여기에 게시. 나는 (: 가지 항목의 has_many를) 나에게 CURRENT_USER 방법에 대한 액세스를 제공합니다 유증을 사용하여 조인되는 두 테이블을 일하고 있어요.

    고유의 출력을 얻기 위해 필요하고 실패 하 'UNIQ'방법을 시도하고 있었다. 시도 몇 가지 솔루션은 실패 여기에 게시. 나는 (: 가지 항목의 has_many를) 나에게 CURRENT_USER 방법에 대한 액세스를 제공합니다 유증을 사용하여 조인되는 두 테이블을 일하고 있어요.

    이 솔루션은 궁극적으로 나를 위해 일한 :

    @current_user.things.select(:item_fk).distinct.each do |thing|
     <%= thing.item.attribute %>
    <% end %>
    
  8. from https://stackoverflow.com/questions/8369812/rails-how-can-i-get-unique-values-from-column by cc-by-sa and MIT license