Rails 4 – acts_as_votable,更改默认排序顺序

我有一个Rails应用程序,允许在某些模型上投票。 在我的一个模型中,我想更改default_scope以便首先显示投票最多的对象。 我在我的模型文件中尝试了以下内容:

 def self.default_scope order('votes_for.size DESC') end 

这给了我以下错误:

 SQLite3::SQLException: no such column: votes_for.size: SELECT "solutions".* FROM "solutions" WHERE "solutions"."competition_id" = ? ORDER BY votes_for.size DESC 

我想知道是否有一种方法可以更改默认的默认排序顺序,我正在做的事情显然不起作用。

如果可能的话,使它在控制器级别(非默认顺序)工作的解决方案也会很好。

为什么votes_for.size ? 我认为votes_for是数据库中的一个属性,它是一种整数,并保持每条记录的计票数。 所以它应该是votes_for DESC

 class MyModel < ActiveRecord::Base default_scope { order('votes_for DESC') } end 

更新在发现vot_for是来自gem的方法而不是db中的属性之后

您将不得不使用缓存投票: https : //github.com/ryanto/acts_as_votable#caching然后您可以使用以下方法创建范围:

 Solution.order(:cached_votes_up => :desc) 

要么

 default_scope { order(:cached_votes_up => :desc) }