我的Rails 3.1.2 app具有如下所示的层次关系:Categories - >讨论 - >评论
一个类别有很多讨论,讨论有很多评论。
在类别显示视图中,我显示了属于该类别的所有讨论的列表。我正在使用Kaminari进行分页。到目前为止,我已经设法在讨论创建时订购它们,如下所示:
@discussions = Discussion.where(:category_id => @category.id).order('created_at desc').page(params[:page])
但是,我宁愿按照与大多数论坛一样的最新评论时间来讨论讨论,最近更新的讨论出现在屏幕顶部。这样做的最佳方式是什么?
答案 0 :(得分:2)
class Category < Model
has_many :discussions, :dependent => :destroy
has_many :comments, :through => :discussions, :dependent => :destroy
def latest_comment_time
comments.last.created_at
end
end
现在,您可以使用Discussion.all.sort_by(&:latest_comment_time)
订购讨论。
答案 1 :(得分:0)
我可能会确保在发布评论时,应该将讨论的updated_at
列设置为当前时间戳。如果您自己编写了所有代码,则可以使用touch
选项轻松完成关联。像这样举例如:
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true, :touch => true
...
end
通过这种方式,您可以继续对updated_at属性进行排序,而无需加入其他表或在其他ruby代码中执行此操作。这样做可能要快得多。
如果您使用gem或其他东西作为您的可评论函数,那么我无法确定应该如何配置它,但它应该有一些配置选项。