我意识到这可能是罕见的事情(两个或更多用户将拥有相同的博客帖子标题)但这是我的客户想要的东西,我必须弄明白。
我有一个查询@blog_posts(这是一个基于位置改变的帖子查询等)。我需要一种方法来列出所有帖子标题以及查询在@blog_posts
像这样:
How to clean a car (2)
I love baseball (1)
是否有分组和排序的标准做法?
总之,我需要计算查询中的匹配项 @blog_posts = Post.where(...)
(例如) - 并非所有帖子都存在。
答案 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"
)
当然,您需要修改查询,以便包含您的条件等。