rails按标题排序博客帖子

时间:2011-08-02 15:08:00

标签: ruby-on-rails ruby ruby-on-rails-3

我意识到这可能是罕见的事情(两个或更多用户将拥有相同的博客帖子标题)但这是我的客户想要的东西,我必须弄明白。

我有一个查询@blog_posts(这是一个基于位置改变的帖子查询等)。我需要一种方法来列出所有帖子标题以及查询在@blog_posts

中出现的次数

像这样:

How to clean a car (2)
I love baseball (1)

是否有分组和排序的标准做法?

总之,我需要计算查询中的匹配项 @blog_posts = Post.where(...) (例如) - 并非所有帖子都存在。

3 个答案:

答案 0 :(得分:2)

是的,您可以使用模型中的命名范围(rails 3+语法)来执行此操作:

scope :title_count, select('id, title, count(*) AS tcount').
    where('created_at >= ?', 10.days.ago).
    group('id, title').
    order('tcount desc')

在您的控制器中:

@posts = Post.title_count

答案 1 :(得分:0)

听起来你基本上想要计算事件:this answer可以适应你的目的。

如果您使用的是1.8.7或更高版本,请考虑group_by

ruby-1.9.2-p180 :002 > posts = ["How to clean a car", "How to clean a car", "I love baseball"]
 => ["How to clean a car", "How to clean a car", "I love baseball"]
ruby-1.9.2-p180 :007 > posts.group_by {|e| e}.map {|k, v| {k => v.length}}
 => [{"How to clean a car"=>2}, {"I love baseball"=>1}] 

答案 2 :(得分:0)

这样的东西?

@blog_post_counts = Post.find(
  :all, 
  :select => "COUNT(*) AS count, title", 
  :group  => "title", 
  :order  => "count DESC"
)

当然,您需要修改查询,以便包含您的条件等。