如何在acts_as_votable中提取最高投票的模型实例?

时间:2012-10-04 02:40:23

标签: ruby-on-rails ruby

假设我有一个在act_as_votable插件下的帖子模型。如何获得投票最多的前30个帖子?它应该很简单;但是,我无法在插件中找到任何详细阐述的文档。

1 个答案:

答案 0 :(得分:8)

我意识到这是一个老问题,但我遇到了同样的问题,感觉就像离开这里我的解决方案。因此,我完成的方式是通过运行下面的迁移,如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)

之类的操作