我正在尝试减少数据库的负载,并且已经读过使用:include方法可以帮助解决这个问题。 我目前有以下代码行允许我选择我需要的所有信息,但是当我尝试在我的视图中使用计数渲染时,我一遍又一遍地访问数据库
@sports = Sport.includes([:teams]).all
在我看来我正在做
- @sports.each do |sport|
%tr
%td= sport.name
%td= sport.teams.count
我怀疑sport.teams.count是导致数据库一遍又一遍地被查询的原因。我该如何解决这个问题?
答案 0 :(得分:2)
您应该使用counter_cache
。另请参阅此screencast。
答案 1 :(得分: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