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

时间:2014-07-16 19:39:10

标签: ruby-on-rails ruby ruby-on-rails-4 default-scope

我有一个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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

Solution.order(:cached_votes_up => :desc)

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