1

我需要帮助弄清楚如何按评论数量对我的帖子进行排序。每当多个帖子具有相同数量的评论时,它将按最新排序。我也在试图弄清楚我是否应该在模型或控制器中执行此操作。

post.rb

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

评论.rb

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

post_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 进行分页。我会提供任何其他有助于回答这个问题的东西。

4

1 回答 1

2

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

评论.rb

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

post_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。

于 2013-08-13T18:35:51.553 回答