У меня есть метод класса в моей модели 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
, что кажется странным.