假设我有一个在acts_as_votable 插件下的帖子模型。如何获得票数最高的前 30 个帖子?它应该很简单;但是,我无法在插件中找到任何详细说明此问题的文档。
问问题
771 次
1 回答
8
我意识到这是一个老问题,但我遇到了同样的问题,并想把我的解决方案留在这里。因此,正如文档所述,我完成此操作的方式是运行下面的迁移。
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_index :posts, :cached_votes_total
add_index :posts, :cached_votes_score
add_index :posts, :cached_votes_up
add_index :posts, :cached_votes_down
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
end
end
然后在我的模型中我添加了下面的类方法
class Post
def self.highest_voted
self.order("cached_votes_score DESC")
end
end
之后,Post.highest_voted
将返回投票最高的帖子。
为了只返回 30 个帖子,您可以执行以下操作Post.highest_voted.limit(30)
于 2013-06-11T17:37:42.750 回答