Как составить список картин по количеству голосов - PullRequest
1 голос
/ 25 ноября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Вы можете сделать это, используя столбец кэша счетчика . Как только вы реализуете эту функциональность, как упомянуто здесь: http://railscasts.com/episodes/23-counter-cache-column, таблица картин будет содержать столбец voice_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

0 голосов
/ 25 ноября 2010

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


# It fetches all paintings needed
@paintings = Painting.all
# Then sort them by number of votes
@paintings = @paintings.sort {|p| p.votes.length}
...