has_many,通过:relationship count

问题描述:

我希望有人能够帮助我,现在想弄明白一个星期了,我发现了很多例子,但是因为我是新来的铁轨,我想我一直在做一个错误的地方,我只是无法找到一个正确的解决方案,我的情况。 所以我有:has_many,通过:relationship count

class Blog < ActiveRecord::Base 
    attr_accessible :name, :subject_id, :created_at 
    has_many :blogs_messages 
    has_many :messages, through: :blogs_messages 
end 

class Message < ActiveRecord::Base 
    attr_accessible :title, :body, :created_at 
    has_many :blogs_messages 
    has_many :blogs, through: :blogs_messages 
end 

class BlogsMessages < ActiveRecord::Base 
    attr_accessible :message_id, :blog_id 
    belongs_to :blog 
    belongs_to :message 
end 

消息生活在不同的博客(比如粉色博客,绿色博客,栗色博客等)和博客生活在主题(深颜色,颜色鲜艳等) 主题有很多博客,但博客只能属于一个主题。

BlogsMessages被消息和博客 之间的连接什么即时试图做的是,以显示: 顶部3博客(通过它们的消息的量)一个主体内

所以例如当我想选择主题深色它会告诉我:

1.Maroon Blog: 46 messages 
    2.Grey Blog: 13 messages 
    3.Purple Blog: 12 messages 

(有总共8个博客中除深颜色。)

可能有人请帮助我,或者至少指向我正确的方向如何使这一切工作?

更新:

我Blogs_controller

现在我有:

@blogs = Blog.joins(:blogs_messages => :message).select('blogs.*, COUNT(messages.id) AS message_count').group('blog_id').order('COUNT(messages.id) DESC').limit(3) 

在我的博客查看:

<% @blogs.each do |blog| %> 
     <li><%= blog.name %>: messages</li> 
    <% end %> 

我不知道这可能是因为我不能工作吨测试它,但它可能会帮助你:

Blog.where(subject_id: subject.id) 
     .joins(:blogs_messages => :message) 
     .select('blogs.*, COUNT(messages.id) AS message_count') 
     .group(:blog_id) 
     .order('message_count DESC') 
     .limit(3) 

而且,在视图中,你可以访问新的虚拟属性message_count

<% @blogs.each do |blog| %> 
    <li><%= blog.name %>: <%= blog.message_count %> messages</li> 
<% end %> 
+0

谢谢你,我想你的建议。我现在在blogs_controller中用@blogs = Blog.includes(:messages_blogs =>:message).... limit(3),正如你所说的 in the查看博客,这是我得到的错误:BlogMysql2 ::错误:'订单子句'中的未知列'message_count':SELECT DISTINCT'blogs'.id FROM'blogs' LEFT OUTER JOIN'messages_blogs' ON'messages_blogs'.' blog_id' ='blogs'.'id' LEFT OUTER JOIN'messages' ON'messages'.'id' ='messages_blogs'.'message_id' GROUP BY blog.id ORDER BY message_count DESC LIMIT 3 – Rimma

+0

哇,这很奇怪,你确定你在查询中使用'select'子句和COUNT(messages.id)AS message_count'? – MrYoshiji

+0

是的,100%肯定。 – Rimma