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。このスクリーンキャストも参照してください。

于 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 に答える