假设我有一个post模型,在acts_a s_votable插件下。我怎样才能获得票数最高的前30个职位?它应该很简单;但是,我在插件中找不到任何详细说明这一点的文档。

最佳答案

我意识到这是一个老问题,尽管如此,我还是遇到了同样的问题,想把我的解决方案留在这里。因此,正如documentation所描述的,我通过运行下面的迁移来实现这一点。

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)

10-07 12:39
查看更多