RubyonRails嵌套循环



我对rails还很陌生,我正在努力找出最好的方法。

我有一张球员表和一张球队表。它们彼此都是HABTM,并使用联接表。

型号

class Player < ActiveRecord::Base
  has_and_belongs_to_many :teams
end
class Team < ActiveRecord::Base
  has_and_belongs_to_many :players
end

控制器

def players
  @players = Player.all
end

查看

<%@players.each do |player|%>
    <tr>
      <td><%= link_to "Add", "steam://friends/add/#{player.steamid}"%></td>
      <td><%= link_to player.name, player%></td>
      <td><%=player.email%></td>
      <td><%=player.teams.teamname%></td>
    </tr>
<%end%>

首先,我知道teamname应该是team_name。

我试着构建一个循环,在各个团队中循环,但这个页面有1600多名玩家,所以运行它需要几分钟时间。

我是不是错过了更好的方法?

之所以速度慢,是因为您正在为每个用户执行另一个查询。这就是所谓的N+1问题,因为这就是算法的复杂性。

通过更有效地从数据库中检索数据,很容易解决这个问题。您可以告诉Rails使用所谓的EagleLoading来加载所有必要的记录。

在这种情况下,它就像这样简单:

@players = Player.includes(:teams).all

Rails将执行一个查询来检索所有玩家,然后执行第二个查询来搜索所有团队,您将同样访问它们——您的视图根本不需要更改!

相关内容

  • 没有找到相关文章

最新更新