繁体   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