【发布时间】:2010-09-27 21:26:08
【问题描述】:
我的投票系统有两个模型:Item(id, name) 和 Vote(id, item_id, user_id)。
这是我目前的代码:
class Item < ActiveRecord::Base
has_many :votes
def self.most_popular
items = Item.all #where can I optimize here?
items.sort {|x,y| x.votes.length <=> y.votes.length}.first #so I don't need to do anything here?
end
end
这有一些问题,主要是我检索了所有项目记录,然后使用 Ruby 计算流行度。我几乎可以肯定有一个简单的解决方案,但我不能完全确定它。
我更愿意收集记录并在初始查询中运行计算。这样,我可以在查询中添加一个简单的:limit => 1(或LIMIT 1)。
任何帮助都会很棒——在所有 ActiveRecord 中重写,甚至在原始 SQl 中重写。后者实际上会让我更清楚地了解我想要执行的查询的性质。
【问题讨论】:
标签: sql mysql ruby-on-rails ruby activerecord