2013-01-21 44 views
0

我希望有人能夠幫助我,現在想弄明白一個星期了,我發現了很多例子,但是因爲我是新來的鐵軌,我想我一直在做一個錯誤的地方,我只是無法找到一個正確的解決方案,我的情況。 所以我有: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 %> 

回答

1

我不知道這可能是因爲我不能工作噸測試它,但它可能會幫助你:

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),正如你所說的<%@ blogs.each do .....%> 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