我有一个绘画模型。投票被嵌入绘画中。我如何通过投票数查询所有绘画和订单?从理论上讲,我想列出所有从投票最多的画作开始的画作。
供参考。以下是两种模型的定义:
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
答案 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}