Обеспечение уникальности в отношении на основе одного столбца - PullRequest
0 голосов
/ 27 октября 2011

У меня есть метод класса в моей модели Consumer, который функционирует как область (действует на ActiveRecord::Relation, возвращает ActiveRecord::Relation, может быть последовательно) и возвращает двойные значения некоторых потребителей.Я хочу, чтобы он возвращал только уникальных потребителей, и я не могу найти ни способа сделать это с помощью помощников Rails, ни подходящего SQL для передачи, чтобы получить то, что я хочу.Я чувствую, что здесь есть простое решение - это не сложная проблема.

Я, по сути, хочу Array#uniq, но для ActiveRecord::Relation.Я попытался использовать оператор select DISTINCT

Consumer.joins(...).where(...).select('DISTINCT consumers.id')

Он вернул правильное свойство 'uniqueness on consumer.id', но вернул только идентификаторы потребителя, поэтому, когда я в итоге загрузил отношение, потребители неесть свои другие атрибуты.Без выбора DISTINCT:

my_consumer = Consumer.joins(...).where(...).first
my_consumer.status  # => "active"

С выбором DISTINCT:

my_consumer = Consumer.joins(...).where(...).select('DISTINCT consumers.id').first
my_consumer.status  # => ActiveModel::MissingAttributeError: missing attribute: status

Я не думал, что ActiveRecord::Relation будет загружаться меньше, чем вся модель, но я думаю, что это будетс утверждением выбора.Когда я запрашиваю Relation после оператора select для класса, который он содержит, он возвращает Consumer, что кажется странным.

1 Ответ

0 голосов
/ 12 декабря 2011
.select('DISTINCT consumers.*')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...