2014-11-17 67 views
0

我是Rails框架中的新成员。我用acts_as_votable宝石和will_paginate宝石。当我想orderarticlesupvote但它不起作用。我使用acts_as_votable的get_likes方法进行排序,但我失败了。我很困难。Rails acts_as_votable gem orders

文章型号:

default_scope { order(get_likes: :desc) } 

后,我得到Statementİnvalid error

+0

get_likes是一种方法,它不能用于你正在尝试,因为它被认为是该表中的一列 –

+0

我该怎么办? – user3930620

+0

让我为你写 –

回答

3

您的get_likes - 方法不适用于订单范围,因为排序顺序是在数据库上执行的,而您的方法数据对于数据库是未知的。

您可以使用数组方法对数据进行排序,但速度很慢,此操作应在数据库级别完成。

通过使用计数器高速缓存来存储列中记录的计数数量,您可以在数据库中进行排序。 acts_as_votable gem已经提供counter-cache implementations

您只需将您需要的列迁移到数据库即可。在这里从他们的文档coulmn:

add_column :posts, :cached_votes_total, :integer, :default => 0 

然后,您可以排序的订单范围。

Post.order(:cached_votes_total=> :desc)