我需要帮助找出如何根据他们的评论数量对帖子进行排序。每当多个帖子具有相同数量的评论时,它将按最近的排序进行排序。我也想弄清楚我是否应该在模型或控制器中这样做。
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进行分页。我会提供其他任何有助于回答这个问题的内容。
答案 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.