我是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
。
答案 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)