按照他们的评论计数对帖子进行排序,然后在Rails中创建Created_at日期

时间:2013-08-10 22:36:50

标签: ruby-on-rails sorting

我需要帮助找出如何根据他们的评论数量对帖子进行排序。每当多个帖子具有相同数量的评论时,它将按最近的排序进行排序。我也想弄清楚我是否应该在模型或控制器中这样做。

post.rb

class Post < ActiveRecord::Base
    has_many :comments, :as => :commentable
end

comment.rb

class Comment < ActiveRecord::Base
    belongs_to :commentable, :polymorphic => true
    belongs_to :user
end

posts_controller.rb

class PostsController < ApplicationController
    def index
        @feed = Post.find(:all, :order => "created_at ASC")
        @posts = Post.includes(:comments).order("comments.size ASC, created_at DESC").page(params[:page]).per(1)
   end

我正在使用kaminari gem进行分页。我会提供其他任何有助于回答这个问题的内容。

1 个答案:

答案 0 :(得分:2)

部分感谢Dave Newton为我提供的资源。我添加了计数器缓存,以保持每个帖子所拥有的列总数的运行计数。到目前为止这是有效的。

<强> comment.rb

class Comment < ActiveRecord::Base
    belongs_to :commentable, :polymorphic => true, :counter_cache => true
    belongs_to :user
end

<强> posts_controller.rb

class PostsController < ApplicationController
    def index
        @posts = Post.order("comments_count, created_at DESC").page(params[:page]).per(1)
    end
end

<强>迁移

class AddCommentCounter < ActiveRecord::Migration
    def self.up
    add_column :posts, :comments_count, :integer, :null => false, :default => 0

    Post.reset_column_information
    Post.all.each do |p|
      p.update_attribute :comments_count, p.comments.length
    end
    end

    def self.down
    remove_column :posts, :comments_count
    end
end

到目前为止,这对我来说是按照总评论排序,然后是最近创建的。以下是railscasts链接:railscasts.com/episodes/23-counter-cache-column.