如何根据投票数列出绘画

时间:2010-11-25 12:54:17

标签: ruby-on-rails mongodb mongoid

我有一个绘画模型。投票被嵌入绘画中。我如何通过投票数查询所有绘画和订单?从理论上讲,我想列出所有从投票最多的画作开始的画作。

供参考。以下是两种模型的定义:

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 个答案:

答案 0 :(得分:1)

您可以使用计数器缓存列来执行此操作。一旦你实现了这里提到的这个功能:http://railscasts.com/episodes/23-counter-cache-column,绘画表将包含votes_count列,其中包含每幅画的投票数

然后,您可以轻松地在您的painting.rb模型中添加named_scope,以按投票数量订购绘画:


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

然后你可以像这样取出所有的画作:

@paintings = Painting.all.order_by_maximum_votes

答案 1 :(得分:0)

如果您仍然不想在数据库中再添加一列,则可以使用另一个简单选项。从数据库中获取所有绘画,然后按投票数对其进行排序:


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