Как перечислить картины на основе количества голосов

StackOverflow https://stackoverflow.com/questions/4277274

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть модель картины. Голоса встроены в живопись. Как я могу запрашивать все картины и порядок по количеству голосов? Теоретически я хотел бы перечислить все картины, начиная с большинства голосов.

Для справочных целей. Вот определение двух моделей:

class Painting
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title, :type => String

  embeds_many :votes
  ...
end

class Vote
  include Mongoid::Document
  include Mongoid::Timestamps

  embedded_in :painting, :inverse_of => :votes
  ...
end
Это было полезно?

Решение

Вы можете сделать это с помощью Counter Cache Column. Отказ Как только вы реализуете эту функциональность, как упоминаться здесь: http://railscasts.com/episodes/23-counter-cache-column, Таблица картин будет содержать столбец VOUTES_COUNT, который содержит количество голосов для каждой картины

Тогда вы можете легко добавить Named_scope в своей модели Painting.rb, чтобы заказать картины по количеству голосов:


class Painting
  named_scope :order_by_maximum_votes, :order => "votes_count DESC"
end

Тогда вы можете получить все картины, как этот путь:

@paintings = Painting.all.order_by_maximum_votes

Другие советы

Если вы все еще не хотите использовать добавить еще один столбец в базе данных, вы можете иметь другой простой вариант. Получите все картины из базы данных, а затем сортируйте их по голосам:


# It fetches all paintings needed
@paintings = Painting.all
# Then sort them by number of votes
@paintings = @paintings.sort {|p| p.votes.length}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top