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" )
当然,您需要修改查询,以便包含您的条件等。