根据 Rails 中最喜欢的帖子对帖子进行排序

Sorting posts based on the most liked in Rails

我正在尝试使用两个标签,一个用于最近的 post,另一个用于最喜欢的 post。但是,我真的很困惑如何让我的 post 按最喜欢(投票)排序。我确实使用 acts_as_votable gem 将投票系统部分放入网站。我是 Rails 的新手,如果您需要更多详细信息,请告诉我,谢谢。

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

创建新迁移 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)