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