无法为每个子项删除单独的查询

时间:2012-04-26 03:13:50

标签: ruby ruby-on-rails-3 activerecord

我有一个场景,我有候选人和候选人有很多投票。我想以最高票数到最低票数的顺序排列候选人。此查询执行此操作:

Candidate.joins(:votes).
  select(['candidates.*', 'SUM(votes.score) as total_score']).group('candidates.id, candidates.candidate_id, candidates.user_id, candidates.status, candidates.card_id, candidates.created_at, candidates.updated_at').
  order('candidates.status desc, total_score desc, candidates.created_at asc').where("candidates.riding_id = ? and candidates.status != ?", 124, CandidateStatus::Eligible ).
  having('SUM(votes.score) >= 0')

我的问题是我用它来渲染它:

render :json => @candidates.to_json(:include => [:votes]) 

这会导致每个候选人的查询得到他们的投票。我应该可以在一个查询中执行此操作,但无论我如何更改它,它仍然会分别抓住每个候选人的投票。

1 个答案:

答案 0 :(得分:0)

当调用#to_json时,必须再次获取投票,因此每个附加查询。但是,使用预先加载,可以在没有其他查询的情况下执行此操作:

Candidate.all(:include => :votes).to_json(:include => [:votes])

因此,可以使用@candidates来完成,包括预先加载,例如:

@candidates = Candidate.all(:include => :votes)

@candidates.to_json(:include => [:votes])