2012-09-26 139 views
0

使用Miniprofiler,我看到我的博客索引頁正在調用每個博客帖子的SQL查詢,以找到票數。我怎樣才能加載投票,以便我可以整合這些查詢?急切加載的activerecord_reputation-系統投票

我看到的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,我目前急於加載作家(作家的has_many:帖子)。

@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

事實證明,這是很難做到的,直到最新版本。請確保你的寶石是最新的最新嘗試此之前,現在還可以急於負荷相當容易使用:

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