我是 noob 所以请原谅,如果这是一个简单的问题,但我正在尝试为rails项目中的特定内容创建“最近流行”输出。
现在我提取的对象有一个属性revision.background_title。我想通过查找过去七天中添加的特定background_title的数量来计算流行度,然后将它们整理好。例如,如果有4个background_title名为'awesomecontent',那么它将高于一个名为'less awesome content'的background_title
这拉动了所有这些:
@revisions = Revision.find(:all,:order =>“created_at desc”)
感谢。
答案 0 :(得分:3)
您可以使用基本的ActiveRecord find
方法执行此操作。代码最终会看起来像这样:
@revisions = Revision.all(
:select => "background_title, count(*) count", # Return title and count
:group => 'background_title', # Group by the title
:order => '2 desc' # Order by the count descending
)
要查看输出,您可以执行以下操作:
@revisions.each do |revision|
puts "Revision #{revision.background_title} appears #{revision.count} times"
end
给
Revision z appears 10 times Revision a appears 3 times Revision b appears 2 times
另一个选择是查看ActiveRecord::Calculations
:
http://api.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html
计算支持count
方法,该方法也支持group
选项。但是,走这条路线会返回一个散列,其中包含background_title
作为键,count
作为值。就个人而言,找到第一种方法更有用。