Подсчитать и выбрать объект в ActiveRecord с 1 запросом - PullRequest
2 голосов
/ 27 октября 2009

У нас есть объекты, которые мы хотим представить в стопках (представьте, как складывать элементы в MMO). Будут повторяться строки.

Допустим, наша таблица Owned_objects выглядит следующим образом.

user_id | object_id
1       | 27
1       | 27
3       | 46
3       | 46
5       | 59

Я хочу сделать запрос

SELECT
  user_id,
  object_id,
  count(*) AS count
FROM owned_objects
GROUP BY
  user_id,
  object_id;

И вернуть либо 3 разных OwnedObject с (или даже просто получить отличные Object с, тоже будет работать) и счетчик связанный с ним.

Я знаю, что это возможно с SQLAlchemy, но вы можете сделать это с ActiveRecord?

Ответы [ 2 ]

3 голосов
/ 27 октября 2009

Как насчет ...

@objects = user.objects.all(:select => "count(*) as count, objects.*", :group => :object_id)

… или подобное?

Затем вы можете получить счетчик по динамически созданному атрибуту для каждого объекта:

@object.first.count # the "stack depth" of the first object.

Это предполагает либо has_and_belongs_to_many :objects, либо has_many :objects, :through => :owned_objects для пользователя.

0 голосов
/ 27 октября 2009

Найдено решение, но не уверен, что оно самое чистое (надеюсь, что нет).

По сути, я создал представление SQL, которое выполняет этот запрос, и создал для него модель. Есть плагин для рельсов, который распознает взгляды на миграцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...