считать внуков объекта в рельсах - PullRequest
0 голосов
/ 25 ноября 2010

Привет, я сейчас создаю небольшое приложение на форуме с rails (3). Я довольно новичок в вопросе Rails, и я застрял, когда хочу вытянуть верхние доски (доска принадлежит форуму), указанная с идентификатором форума).

«определение верхней доски»: доска, принадлежащая конкретному идентификатору forum_id, у которого больше всего topic_replies & theme.

"Генеалогическое древо": Форум> Форум> Тема> Тема Ответ

мои модели:

**forum.rb**

class Forum < ActiveRecord::Base
  default_scope :order => 'display_order ASC'
  has_many :boards, :dependent => :destroy
end


**board.rb**

class Board < ActiveRecord::Base
  default_scope :order => 'display_order ASC'

  belongs_to :forum
  has_many :topics, :dependent => :destroy
  has_many :topic_replies, :through => :topics

  def latest_topic_reply
    t = TopicReply.find_by_sql("SELECT tr.* from topic_replies tr, topics t where tr.topic_id = t.id AND t.board_id = #{self.id} ORDER BY tr.updated_at desc LIMIT 1;")[0]
  end
end


**topic.rb**

class Topic < ActiveRecord::Base
  belongs_to :board
  has_many :topic_replies, :dependent => :destroy
end


**topic_reply.rb**

class TopicReply < ActiveRecord::Base
  belongs_to :topic
end

В SQL я бы сделал это:

"SELECT b.* FROM boards b,topics t WHERE t.board_id=b.id AND b.forum_id=2 GROUP BY board_id ORDER BY SUM(t.topic_replies_count) DESC LIMIT 4;"

Я предпочитаю управлять этим с помощью активных записей, хотя (или это не лучше, чем SQL?), Я пока не слишком знаком с этим. Может кто-нибудь подтолкнуть меня в правильном направлении, пожалуйста?

Заранее спасибо

1 Ответ

1 голос
/ 25 ноября 2010

Вы можете попытаться заставить его работать так:

Board.joins(:topics).where(:forum_id => @forum.id).order(:topic_replies_count).to_sql

Используя to_sql, вы можете увидеть, какой SQL он генерирует.topic_replies_count будет столбцом кэша счетчика в Topic, который содержит текущее количество ответов, связанных с темой.

Подробности о запросах Rails 3 можно найти в руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...