Предположим, у меня есть следующие модели:
class Item
# (name, price, location, quantity)
has_many :purchases
end
class Purchase
has_many :items
belongs_to :person
end
class Person
# (name, age)
has_many :purchases
end
Мне нужно найти все уникальные предметы с именем «cd», купленные человеком по имени «боб».
Тогда, на мой взгляд, мне нужно:
@items
содержать уникальные записи@items.count
чтобы вернуть числополучить доступ ко всем атрибутам каждого элемента при цикле:
<% @items.each do |i| %> <%= "#{i.name}, #{i.locatiton}, #{i.quantity}" %> <% end %>
@items должен быть ActiveRecord::Relation (чтобы я мог разбить на страницы)
Мой запрос до сих пор выглядит примерно так:
@items = Item.joins(:purchase => :person).where('person.name' => 'bob')
оставив @items как есть, проблема состоит в том, что он содержит повторяющиеся элементы
Что я пробовал:
1) @items.uniq
удаляет дубликаты, но возвращает массив, и мне нужен ActiveRecord::Relation
2) @items.select('distinct(items.name)')
удаляет дубликаты, но возвращает отношение, содержащее только имя элемента, и мне нужны все атрибуты
3) @items.group('items.name')
удаляет дубликаты и возвращает отношение, но метод подсчета возвращает OrderedHash, а не число. Да, я могу подсчитать ключи, но у меня есть те же представления для других отношений, которые возвращают число при вызове метода подсчета для отношения.
Я действительно не знаю, что еще попробовать, любое предложение?