вторник, 12 июля 2011 г.

Re: подсчёт в ассоциированной модели

Спасибо, разобрался, работает.

Client.count_by_sql('
  SELECT COUNT(*) FROM (
    SELECT client_id, COUNT(*) AS relevance FROM clients_items ci
    INNER JOIN items i ON ci.items_id = i.id
    WHERE i.title IN ("title1", "title2"...)
    GROUP BY client_id ) cis
  INNER JOIN clients c ON cis.client_id = c.id')

Всё ещё остаётся вопрос, как сделать то же самое Rails Way. На stackoverflow нашёл совсем похожий вопрос,
плагин nested_has_many_through должен решить проблему для eager loading.

11 июля 2011 г. 21:13 пользователь Tsyren Ochirov <nsu1team@gmail.com> написал:
Похоже как у вас, только есть третья таблица

http://stackoverflow.com/questions/1938155/complex-sql-query-across-habtm-join-table-with-ordering-in-rails

2011/7/11 Алексей Данченков <adanchenkov@gmail.com>
Прошу прощения за нубовский вопрос.

Есть две HABTM модели: Client, Item.

class Client < ActiveRecord::Base
  has_and_belongs_to_many :items
  attribute_accessible :name
end

class Item < ActiveRecord::Base
  belongs_to :kind
  has_and_belongs_to_many :clients
  attribute_accessible :title, :kind
end

Как быстрее всего подсчитать клиентов, у которых есть определённый набор Item-ов?

Пока родился какой-то монстр вроде:

Clients.each do |client|
  client.items.find_all_by_kind_id(kind_id).count
end

Прошу послать, где читать.

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий