0

我试图有两个标签,一个用于最近的帖子,另一个用于最喜欢的帖子。但是,我真的不知道如何让我的帖子按最喜欢(投票)排序。我确实使用acts_as_votable gem 将投票系统部分放入网站。我是Rails的新手,如果您需要帮助,请告诉我更多细节,谢谢。

4

1 回答 1

0

您应该启用缓存。这些列将在每次投票后自动更新。

创建新的迁移rails g migration add_cached_votes_to_posts并添加以下代码:

class AddCachedVotesToPosts < ActiveRecord::Migration
  def self.up
    add_column :posts, :cached_votes_total, :integer, :default => 0
    add_column :posts, :cached_votes_score, :integer, :default => 0
    add_column :posts, :cached_votes_up, :integer, :default => 0
    add_column :posts, :cached_votes_down, :integer, :default => 0
    add_column :posts, :cached_weighted_score, :integer, :default => 0
    add_column :posts, :cached_weighted_total, :integer, :default => 0
    add_column :posts, :cached_weighted_average, :float, :default => 0.0
    add_index  :posts, :cached_votes_total
    add_index  :posts, :cached_votes_score
    add_index  :posts, :cached_votes_up
    add_index  :posts, :cached_votes_down
    add_index  :posts, :cached_weighted_score
    add_index  :posts, :cached_weighted_total
    add_index  :posts, :cached_weighted_average

    # Uncomment this line to force caching of existing votes
    # Post.find_each(&:update_cached_votes)
  end

  def self.down
    remove_column :posts, :cached_votes_total
    remove_column :posts, :cached_votes_score
    remove_column :posts, :cached_votes_up
    remove_column :posts, :cached_votes_down
    remove_column :posts, :cached_weighted_score
    remove_column :posts, :cached_weighted_total
    remove_column :posts, :cached_weighted_average
  end
end

运行迁移命令rake db:migrate

并使用缓存列进行排序:

Post.order(cached_votes_score: :desc)
于 2016-12-22T11:35:18.797 回答