has_many,通过:relationship count
问题描述:
我希望有人能够帮助我,现在想弄明白一个星期了,我发现了很多例子,但是因为我是新来的铁轨,我想我一直在做一个错误的地方,我只是无法找到一个正确的解决方案,我的情况。 所以我有:has_many,通过:relationship count
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 %>
答
我不知道这可能是因为我不能工作吨测试它,但它可能会帮助你:
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 %>
谢谢你,我想你的建议。我现在在blogs_controller中用@blogs = Blog.includes(:messages_blogs =>:message).... limit(3),正如你所说的 in the查看博客,这是我得到的错误:BlogMysql2 ::错误:'订单子句'中的未知列'message_count':SELECT DISTINCT'blogs'.id FROM'blogs' LEFT OUTER JOIN'messages_blogs' ON'messages_blogs'.' blog_id' ='blogs'.'id' LEFT OUTER JOIN'messages' ON'messages'.'id' ='messages_blogs'.'message_id' GROUP BY blog.id ORDER BY message_count DESC LIMIT 3 – Rimma
哇,这很奇怪,你确定你在查询中使用'select'子句和COUNT(messages.id)AS message_count'? – MrYoshiji
是的,100%肯定。 – Rimma