Rails: как получить уникальные значения из столбца - PullRequest
60 голосов
/ 03 декабря 2011

Как я могу получить уникальные значения из столбца в таблице?Например, у меня есть эта таблица продуктов:

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

Ответы [ 7 ]

132 голосов
/ 29 июля 2012

Еще два способа:

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

Products.uniq.pluck(:category)

Для Рельсы> = 5.1 Использование:

Products.distinct.pluck(:category)
26 голосов
/ 03 декабря 2011

Я думаю, вы можете сделать это:

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

Источник: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

9 голосов
/ 21 декабря 2013

Это делает всю работу на сервере базы данных.В результате получается простой массив.

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

Rails генерирует SQL, который работает с любой базой данных (Postgres, MySQL и т. Д.).

SELECT DISTINCT "products"."category" FROM "products"
7 голосов
/ 06 октября 2016

Я предлагаю использовать Products.all.distinct.pluck(:category), потому что uniq устарела с 5-го рельса и будет удалена с 5,1

.
6 голосов
/ 03 декабря 2011

Попробуйте это (в консоли рельсов)

Product.group(:category)

Product.group(:category).each { |p| p.name }
2 голосов
/ 21 августа 2018

Для 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)

0 голосов
/ 31 марта 2016

Требуется, чтобы получить уникальный вывод, и безуспешно пробовал метод 'uniq'.Перепробовал несколько решений, выложенных здесь безуспешно.Я использую devise, который дает мне доступ к методу current_user и работает с двумя таблицами, одна из которых является объединением (элемент has_many: вещи).

Это решение в конечном итоге сработало для меня:1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...