私はこれらのモデルを持っています
class PlayersToTeam < ActiveRecord::Base
belongs_to :player
belongs_to :team
accepts_nested_attributes_for :player
end
class Player < ActiveRecord::Base
has_many :players_to_teams
has_many :teams, through: :players_to_teams
end
class Team < ActiveRecord::Base
has_many :players_to_teams
has_many :players, through: :players_to_teams
belongs_to :account
end
の表示ビューで、そのteams
のすべてを表示します。編集リンクは実際にはエントリを編集するためのものなので、次のようなものがありました。players
team
players_to_teams
<% @team.players.each do |player| %>
<tr>
<td><%= player.FirstName %></td>
<td><%= player.LastName %></td>
<td><%= link_to "Edit", edit_players_to_team_path(player.players_to_teams.find_by_team_id(@team.id)) %></td>
</tr>
@team
として定義されましたTeam.find(params[:id])
。これは非常に遅く、開発ログを見ると、ラインですべてのプレーヤーに対してデータベースが何度もヒットしていたためでしたedit_players_to_team_path
(プレーヤーを見つけてから、要件に一致する player_to_team を見つけるために、おそらくもっと?)。
players_to team
だから私は代わりにレコードを使用するように切り替えました
<% @players_to_teams.each do |ptt| %>
<tr>
<td><%= ptt.player.FirstName %></td>
<td><%= ptt.player.LastName %></td>
<td><%= link_to "Edit", edit_players_to_team_path(ptt) %></td>
</tr>
<% end %>
コントローラーのどこ@players_to_teams
に等しいかteam.players_to_teams
。これははるかに高速ですが、それでも私のビューのすべての行でデータベースにアクセスしているようです。
その に関連付けられている または レコードを返さないTeam.find(params[:id])
と思います。これらの関連付けを含めて、 への呼び出しがと関連レコードの両方への参照を持つオブジェクトを返すようにする方法はありますか?players
players_to_teams
team
Team.find(params[:id])
player
player_to_teams