[英]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.