3

我有一个主题模型和一个帖子模型。一个Topic有很多Post,一个Post属于Topic。

我想index根据每个主题的最新帖子显示主题页面。最近的最后一个帖子是针对一个主题的,它将更多地显示在顶部。我基本上希望模拟常规论坛所做的事情。如果您回复一个主题,该主题会在索引页面中上升。

因此,我需要根据每个主题的最后一篇文章的 *created_at* 以某种方式对主题进行排序。如何才能做到这一点?

主题控制器.rb

def index
  @forum = Forum.find(params[:forum_id])
  @topics = @forum.topics.find(:all, :order => "last_post_id DESC")
  # last_post_id is a column of Topic that stores ID of the last post
end

post.rb

class Post < ActiveRecord::Base
  belongs_to :topic
  attr_accessible :content
end

主题.rb

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  belongs_to :forum
  accepts_nested_attributes_for :posts, :allow_destroy => true
  attr_accessible :name, :last_post_id, :posts_attributes
end
4

2 回答 2

3

那么 Topic.includes(:posts).order('posts.created_at DESC')

于 2012-06-14T15:21:18.403 回答
2

我同意 Oscar 但对于您的情况,请务必考虑变量:

:updated_at

如果某些东西是在 2 年前创建的,然后在五分钟前进行了更新,那并没有真正帮助解决这种情况。

Topic.include(:posts).order('posts.updated_at DESC')
于 2012-06-14T15:24:20.790 回答