У меня есть следующие модели:Нетерпеливой Загрузки Уплотненного Ассоциация
class Session < ActiveRecord::Base
belongs_to :game
has_many :session_players
has_many :players, through: :session_players
end
class SessionPlayer < ActiveRecord::Base
belongs_to :player
belongs_to :session
end
class Player < ActiveRecord::Base
has_many :session_players
has_many :sessions, through: :session_player
end
В файле Еврорадио я пытаюсь перебрать все сеансы, отображающий некоторую информацию о сессии и отображение вложенных данных о каждом игроке на эту сессию.
Соответствующий код в файле ERB является:
<% @sessions.each do |session| %>
<tr>
<td><%= session.name %></td>
<td>
<table>
<% session.session_players.each do |session_player| %>
<!-- problem line below -->
<tr><td><%= session_player.player.name %> (<%= session_player.placing %>)</td></tr>
<% end %>
</table>
</td>
</tr>
<% end %>
Проблема заключается в том, что я не могу вытащить данные с обоих игрока и объекта session_player из-за нулевого исключения при получении значения name
прочь session_player.player.name
звонок. Вызов session_player.placing
преуспевает.
Я считаю, что это была ленивая проблема с загрузкой, так как я могу получить значение session_player.player.name
при отладке кода, просто не при его запуске. Я пытался нетерпеливый загрузки данных, пытаясь различными включает в себя комбинации в контроллере, но это не делает разницы:
@sessions = Session.includes(:session_players => :player).all
Причина, по которой вы получаете пустое исключение при получении значения имени из 'session_player.player.name', связано с тем, что определенный' session_player' не имеет связанного с ним 'игрока'. Убедитесь, что все значения поля 'player_id' в таблице' session_players' ** не являются нулевыми ** и соответствуют таблице 'ids'' players' – Pavan
В этом была проблема. Одно из последних значений было null. Я думал, что нетерпевая загрузка выявит проблему в контроллере, а не при разрешении данных в шаблоне, но это не так. –