rails按标题排序博客post

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

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

像这样:

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

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

总之,我需要计算查询中出现次数 @blog_posts = Post.where(...) (例如) – 并非所有post都存在。

听起来你基本上想要计算事件: 这个答案可以适应你的目的。

如果您使用的是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}] 

是的,您可以使用模型中的命名范围(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 

像这样的东西?

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

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