簡體   English   中英

has_many通過:關系計數

[英]has_many , through: relationship count

我希望有人可以幫我解決這個問題,現在已經設法解決了一個星期,我發現了很多例子,但是由於我是Rails的新手,我想我在某個地方一直犯錯,我只是找不到一個正確的解決方案 所以我有:

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

消息存在於不同的Blog中(例如Pink Blog,Green Blog,Maroon Blog等),而Blog則存在於主題(深色,鮮艷的顏色等)中,主題具有多個Blog,但是Blog只能屬於一個主題。

BlogsMessages是Messages和Blogs之間的聯系,我試圖顯示的是:一個主題內的前3個Blogs(按其中的消息量)

因此,例如,當我想選擇“主題深色”時,它將顯示給我:

    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 %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM