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
'Nice programing' 카테고리의 다른 글
Java에서 두 문자열을 어떻게 연결합니까? (0) | 2020.11.22 |
---|---|
가장 빠른 JavaScript 요약 (0) | 2020.11.22 |
파일 경로에서 .exe 파일 버전 번호를 얻는 방법 (0) | 2020.11.22 |
3 개 이상의 항목이있는 BottomNavigationView : 탭 제목이 숨겨져 있습니다. (0) | 2020.11.22 |
파이썬에서 변수 이름을 어떻게 인쇄 할 수 있습니까? (0) | 2020.11.22 |