渴望加载activerecord_reputation-system投票

时间:2012-09-26 18:37:35

标签: ruby-on-rails activerecord eager-loading

使用Miniprofiler,我看到我的博客索引页面正在为每个博客帖子调用SQL查询,以便查找投票数。我如何急于加​​载投票,以便我可以整合这些查询?

我看到的SQL对于每个条目都是如下所示。

SELECT  "rs_reputations".* FROM "rs_reputations" WHERE "rs_reputations"."reputation_name" = 'votes' AND "rs_reputations"."target_id" = 8 AND "rs_reputations"."target_type" = 'Post' LIMIT 1

在我的posts_controller中,我目前急于加载作者(Writer has_many:posts)。

@posts = Post.includes(:writer).paginate(page: params[:page]), :per_page => 10)

如何添加:投票?我试过

@posts = Post.includes(:writer, :rs_reputation).paginate(page: params[:page]), :per_page => 10)

@posts = Post.includes(:writer, :votes).paginate(page: params[:page]), :per_page => 10)

两者都不起作用。

我的帖子模型如下

post.rb

belongs_to: :writer
has_reputation :votes, source: :writer, aggregated_by: sum

1 个答案:

答案 0 :(得分:0)

原来这很难做到,直到最新发布。在尝试之前确保你的宝石是最新的,但现在你可以通过使用以下方式轻松加载:

evaluated_by(reputation_name, source [, scope])

例如:

Post.evaluated_by(:votes, @writer)

可以在github上找到讨论主题here

更新:仔细检查,此方法不适合您。它渴望加载特定作者所做的所有评估,而不是每个帖子的声誉。我会更多地研究这个,但你也可以考虑在github上发布你的问题。这个宝石的开发人员非常敏感,可能会在几天内为您提供解决方案。

工作解决方案:我在github上问过,得到了this answer。它应该像这样工作。像这样查询您的帖子:

Post.find_with_reputation(:reputation_name, :all)

然后得到这样的投票值:

post.votes