こんにちは、私は現在、レール(3)で小さなフォーラムアプリケーションを構築しています。私はRailsの問題ではかなり新しいです。フォーラムIDで指定されたトップボード(掲示板はフォーラムに属しています)を引っ張りたい時には固まってしまいました。レール内のオブジェクトの孫をカウントする
「トップボードを定義する」:特定のforum_idに属するボードで、最もトピック数が多いのは&です。
"家系図":私はこれを行うだろう
SQLで**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
:フォーラム>ボード>トピック> TopicReply
私のモデル
"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より優れているのではないですか?)では、私はあまりにもそれに精通していません。誰か私を正しい方向に押してください。事前
キャッシュ列の参照のおかげで、まだそれを知らなかった。まだ適切なActiveRecordが見つかりませんでしたが、適切なSQLを追加しました。 – Ayrton
"正しいARを見つけられませんでした"とはどういう意味ですか? '.to_sql'を' .all'に置き換えた場合、このコードは必要なコレクションや 'Boards'を正しく返します。 – Matt