0

我正在尝试减少我们的数据库的负载,并且已经阅读过使用 :include 方法可以帮助解决这个问题。我目前有以下代码行,它允许我选择我需要的所有信息,但是当我尝试在我的视图中用计数呈现它时,我一遍又一遍地访问数据库

@sports = Sport.includes([:teams]).all

在我看来我在做

- @sports.each do |sport|
  %tr
    %td= sport.name
    %td= sport.teams.count

我怀疑 sport.teams.count 是导致数据库被一遍又一遍地查询的原因。我该如何解决?

4

2 回答 2

2

您应该counter_cache为此使用 a 。另请参阅此截屏视频

于 2013-02-24T13:50:02.347 回答
1

正如 mischa 所说,您可以使用 counter_cache 来解决您的问题。但是您也可以查看此 sql 语句以获取计数

@sports = Sport.select('sports.*, (SELECT COUNT(*) FROM teams WHERE teams.sport_id = sports.id) AS teams_count')

那么你可以使用sport.teams_count

- @sports.each do |sport|
  %tr
    %td= sport.name
    %td= sport.teams_count
于 2013-02-24T14:28:39.300 回答