I was hoping someone could help me with this, been trying to figure it out for a week now, I found a lot of examples, but as I'm new to rails I guess I keep making a mistake somewhere and I just cant find a right solution for my case. So I have:
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
Messages live in different Blogs(like Pink Blog, Green Blog, Maroon Blog etc), and Blogs live in Subjects (Dark Colors, Bright Colors etc) Subjects have many Blogs, but Blogs can belong only to one Subject.
BlogsMessages is the connection between Messages and Blogs what im trying to do is to show: top 3 Blogs (by amount of messages in them) within one Subject
so e.g. when I want to choose Subject Dark Colors it will show me:
1.Maroon Blog: 46 messages
2.Grey Blog: 13 messages
3.Purple Blog: 12 messages
(There are 8 Blogs altogether in Subject Dark Colors.)
Could someone please help me with this, or at least point me in the right direction how to make it all work?
Update:
in my Blogs_controller now i have:
@blogs = Blog.joins(:blogs_messages => :message).select('blogs.*, COUNT(messages.id) AS message_count').group('blog_id').order('COUNT(messages.id) DESC').limit(3)
in my blogs view:
<% @blogs.each do |blog| %>
<li><%= blog.name %>: messages</li>
<% end %>