Salut, je suis en train de construire une petite application de forum avec des rails (3). Je suis assez nouveau dans le domaine des Rails et je me suis coincé quand je veux tirer les cartes du haut (un forum appartient à un forum) spécifié avec un identifiant de forum). "Définition d'une carte supérieure": une carte appartenant à un forum_id spécifique qui a le plus de sujets topic_replies &.compter petits-enfants d'un objet dans les rails
"l'arbre généalogique": Forum> Conseil> Sujet> TopicReply
mes modèles:
**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
Dans SQL je ferais ceci:
"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;"
Je préfère gérer cette avec des enregistrements actifs (ou n'est-ce pas mieux que le SQL?), je ne le connais pas encore tout à fait. Quelqu'un pourrait-il me pousser dans la bonne direction s'il vous plaît?
Merci à l'avance
merci pour la référence pour la colonne de cache, ne le savais pas encore. Je n'ai pas encore trouvé le bon ActiveRecord, mais j'ai ajouté le bon SQL. – Ayrton
Que voulez-vous dire par "n'avez pas trouvé le bon AR"? Si vous remplacez le '.to_sql' par' .all' par exemple, ce morceau de code retournera la collection ou 'Boards' dont vous avez besoin, commandé correctement. – Matt