У меня много пользователей, и каждый пользователь имеет несколько проектов.
Теперь я хочу получить только один элемент на пользователя.
@projects = проект.все.где (user_id уникален)
То есть проект должен быть извлечен, только если ни один другой проект от того же пользователя не был извлечен уже.
Надеюсь, я был ясен с моим вопросом. I am on Rails 5.
РЕДАКТИРОВАТЬ:
Я использую postgres в производстве.
Вы, вероятно, хотели бы сделать что-то подобное.
Users.uniq.pluck(:projects)
Есть много способов сделать это. Я бы рекомендовал следующий код в качестве отправной точки:
Вот как это работает:
Мы группируем проекты
user_id
и используемmaximum
, чтобы выбрать один с самым высоким идентификатором (вы можете использоватьminimum
или любой другой rmethod выбора одной строки из группы). Более подробный:a.
projects_scope.group(:user_id).maximum(:id)
возвращаетHash
сопоставление идентификаторов пользователей с идентификаторами проектов. Например{ 12 => 17, 14 => 3 }
средства для пользователя12
выбираем проект17
, а для пользователя14
выбираем проект3
.b. Нас интересуют только идентификаторы проектов, поэтому мы получаем значения в хэше, вызывая
Hash#values
).Зная идентификаторы, мы запрашиваем базу данных для соответствующих проектов и назначаем результат
@projects
.Если вы хотите узнать некоторые более продвинутые методы, я рекомендую вам взглянуть на этот вопрос переполнения стека .