【发布时间】:2013-01-21 14:28:57
【问题描述】:
我希望有人可以帮助我解决这个问题,我已经尝试了一个星期,我找到了很多示例,但是由于我是 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 %>
【问题讨论】:
标签: mysql ruby-on-rails database