Rails acts_as_votable gem ordering

时间:2014-11-17 10:13:27

标签: ruby-on-rails ruby sorting ruby-on-rails-4

我是Rails框架中的新手。我使用了acts_as_votable gem和will_paginate gem。当我想order articles upvote时,它不起作用。我使用acts_as_votable的get_likes方法进行订购,但我失败了。我真的被卡住了。

文章模型:

default_scope  { order(get_likes: :desc) }
之后我得到Statementİnvalid error

1 个答案:

答案 0 :(得分:4)

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

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

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

您只需要将所需列的迁移添加到数据库中。这里有来自他们博士的库存:

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

之后您可以使用订单范围进行排序。

Post.order(:cached_votes_total=> :desc)