0

誰かがこれを手伝ってくれることを望んでいて、1週間それを理解しようとしていたので、たくさんの例を見つけましたが、私はレールに慣れていないので、どこかで間違いを犯し続けていると思います。私の場合の正しい解決策。ので、私は持っています:

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

メッセージはさまざまなブログ(ピンクブログ、グリーンブログ、マルーンブログなど)に存在し、ブログはサブジェクト(暗い色、明るい色など)に存在します。サブジェクトには多くのブログがありますが、ブログは1つのサブジェクトにのみ属することができます。

BlogsMessagesは、メッセージとブログの間の接続であり、私が行おうとしているのは、1つのサブジェクト内の上位3つのブログ(メッセージの量による)です。

たとえば、Subject Dark Colorsを選択すると、次のように表示されます。

    1.Maroon Blog: 46 messages
    2.Grey Blog: 13 messages
    3.Purple Blog: 12 messages 

(Subject Dark Colorsには全部で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 %>
4

1 に答える 1

1

テストできないため、これが機能するかどうかはわかりませんが、役立つ場合があります。

 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 %>
于 2013-01-21T14:36:04.087 に答える