使用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
答案 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