我希望有人可以帮助我解决这个问题,现在已经尝试了一个星期,我找到了很多例子,但是由于我是 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
消息存在于不同的博客中(如粉色博客、绿色博客、栗色博客等),博客存在于主题中(深色、亮色等)主题有许多博客,但博客只能属于一个主题。
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 %>