в рельсах, как я могу получить все параметры модели после объединения с другими моделями, получить ActiveRecord :: Relation, метод которого count возвращает число - PullRequest
0 голосов
/ 16 февраля 2012

Предположим, у меня есть следующие модели:

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", купленные человеком с именем "bob"

Тогда, на мой взгляд, мне нужно:

  • @items для хранения уникальных записей
  • @items.count чтобы вернуть число
  • доступ ко всем атрибутам каждого элемента при цикле:

    <% @items.each do |i| %>
      <%= "#{i.name}, #{i.locatiton}, #{i.quantity}" %>
    <% end %>
    
  • @ элементов, которые должны быть ActiveRecord :: Relation (чтобы я мог разбивать на страницы)

Мой запрос до сих пор выглядит примерно так:

@items = Item.joins(:purchase => :person).where('person.name' => 'bob')

оставляя @items как есть проблема с дублирующимися элементами

Что я пробовал:

1) @items.uniq удаляет дубликаты, но возвращает массив, и мне нужен ActiveRecord :: Relation

2) @items.select('distinct(items.name)') удаляет дубликаты, но возвращает отношение, содержащее только item.name, и мне нужны все атрибуты

3) @items.group('items.name') удаляет дубликаты и возвращает отношение, но метод count возвращает OrderedHash, а не число да, я могу посчитать ключи, но у меня есть те же представления для других отношений, которые возвращают число при вызове метода count для отношения.

Я действительно не знаю, что еще попробовать, есть предложения?

1 Ответ

0 голосов
/ 16 февраля 2012

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

@items.select("DISTINCT(`items`.`name`), `items`.*")

И использовать то, что вам нужно от предметов.Вы пробовали это?

...