Наиболее эффективный способ вложенного порядка, группы, суммы счета? - PullRequest
1 голос
/ 01 ноября 2011

Пользователь has_many: продукты Продукты has_many: лайки

Я хочу возвращать записи в порядке убывания для пользователей на основе общего количества лайков, которые они получили.

например, у пользователя 1 есть продукты (A, B, C) A = 4 лайка, B = 2 лайка, C = 1 лайк, всего = 7 лайков

У пользователя 2 есть товары (D,E) D = 4 лайка, E = 6 лайков, Всего = 10 лайков

У пользователя 3 есть товары (F, G, H, I) F, G, H, I = каждый 1 лайк, Всего = 4лайки

Результат => Пользователь 2, Пользователь 1, Пользователь 3

Какой самый эффективный способ сделать это?

1 Ответ

1 голос
/ 01 ноября 2011

Мы должны использовать счетчик кэша, чтобы отслеживать количество лайков для каждого продукта. Для этого нам нужно добавить новый столбец likes_count типа integer в таблицу продуктов.

Ссылка: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Модель пользователя:

class User < ActiveRecord::Base
 has_many :products
 scope :popular_products, joins(:products).group("user_id").
        order("sum(likes_count) DESC")
end

Модель продукта:

class Product < ActiveRecord::Base
  belongs_to :user
  has_many :likes
end

Мне нравится модель:

class Like < ActiveRecord::Base
  belongs_to :product , :counter_cache => true
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...