我有一个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
我想知道是否有办法更改默认的默认排序顺序,我正在做的事情显然不起作用。
如果可能的话,让它在控制器级别(非默认顺序)工作的解决方案也会很好。
答案 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) }