如何消除一些查询?

时间:2011-02-08 21:51:59

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

好的,所以我这样做

<% @courses.each do |course| %>
    <tr>
      <th>Users</th>
    </tr>
  <tr>
    <td>
     <span><%= course.not_competent %></span> <span><%= course.novice %></span></td>
  </tr>
<% end %>

这在我的课程模型中我有这个

def novice
  self.courses_users.low_scores.collect{|score| score.user.username}.join(', ')
end

def not_competent
  self.courses_users.really_low_scores.collect{|score| score.user.username}.join(', ')
end

问题是这种方法会运行数以千计的查询....有没有更好的方法不会降低数据库

1 个答案:

答案 0 :(得分:1)

对@Zabba,首先尝试更改填充@courses的调用并添加类似于此params的内容

:include => [{:courses_users => :low_scores}]

或链

.includes([{:courses_users => :low_scores}])

(我认为low_scores是你模型的另一个关联)

以这种方式,Activerecord更改了您包含嵌套表的第一个查询。在此ascii_cast某个示例中。

希望它可能有用