Nice programing

Rails : 열에서 고유 한 값을 얻는 방법

nicepro 2020. 11. 22. 20:34
반응형

Rails : 열에서 고유 한 값을 얻는 방법


테이블의 열에서 고유 한 값을 얻으려면 어떻게해야합니까? 예를 들어 다음 제품 테이블이 있습니다.

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

여기서는 1st_cat 및 2nd_cat의 두 값만 얻고 싶습니다.

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

두 가지 방법이 더 있습니다.

Products.select(:category).map(&:category).uniq

Products.uniq.pluck(:category)

들어 레일> = 5.1 사용 :

Products.distinct.pluck(:category)

나는 당신이 이것을 할 수 있다고 생각합니다.

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

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


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

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

Rails는 모든 데이터베이스 (Postgres, MySQL 등)에서 작동하는 SQL을 생성합니다.

SELECT DISTINCT "products"."category" FROM "products"

레일 5 이후로 더 이상 사용되지 않고 레일 5.1에서 제거 Products.all.distinct.pluck(:category)되므로 사용하는 것이 좋습니다.uniq


이것을 시도하십시오 (rails 콘솔에서)

Product.group(:category)

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

postgres의 경우

<% 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 %>

할 때 잘못된 열을 반환 할 수 있기 때문입니다 joins(예 : id조인 된 테이블에서 열을 반환 하지만 반환 하지 않음 products).


고유 한 출력을 가져와야하고 'uniq'방법을 시도하지 못했습니다. 여기에 게시 된 여러 솔루션을 시도했지만 실패했습니다. current_user방법에 대한 액세스 권한을 제공 하고 하나는 조인 (항목 has_many : things) 인 두 개의 테이블로 작업 하는 devise를 사용 하고 있습니다.

이 솔루션은 궁극적으로 저에게 효과적이었습니다.

@current_user.things.select(:item_fk).distinct.each do |thing|
 <%= thing.item.attribute %>
<% end %>

참고 URL : https://stackoverflow.com/questions/8369812/rails-how-can-i-get-unique-values-from-column

반응형