2014-11-19 3 views
0

У меня есть 3 модели, которые взаимодействуют:ActiveRecord has_many ассоциации нуль

  • Sessions
  • Каждый Session имеет несколько SessionPlayer s
  • Каждый SessionPlayer принадлежит Player

На соответствующем индексе сессии , Я пытаюсь отобразить список игроков сеанса для данного сеанса, и каждый сеанс имя игрока игрока - session_player.player.name. Запуск страницы Rails предоставляет мне правильные данные, но во время тестирования у меня проблема.

В index.html.erb странице я использую следующий цикл:

<% @sessions.each do |session| %> 
    <% session.session_player.each do |player| %> 
     <div><%= player.player.name %></div> 
    <% end %> 
<% end %> 

Когда код выполняется во время теста, он получает нулевое исключение на player.player, однако я могу отладить его и его имеет значение, установленное правильно для player.player_id, заставив меня поверить, что что-то не так с моим кодом модели или каким-то странным кэшированием происходит во время теста.

Session модель

class Session < ActiveRecord::Base 
    has_many :session_player 
    has_many :player, through: :session_player 
end 

SessionPlayer модель

class SessionPlayer < ActiveRecord::Base 
    belongs_to :player 
    belongs_to :session 
end 

Player модель

class Player < ActiveRecord::Base 
    has_many :session_player 
    has_many :session, through: :session_player 
end 

Данные испытаний и арматура оба шаблонный создана с помощью RubyMine (как были контроллеры и модели) , но я могу p если это необходимо.

+1

первую очередь попытаться изменить: 'has_many: session_players' –

+0

и второй:' session.session_players.each' –

ответ

3

Я думаю, что проблема в том, что вы использовали session_player, но она должна быть session_players, используйте эту строку вместо

<% session.session_players.each do |player| %> 

И в вашей модели, так как вы используете has_many, вы должны использовать множественную форму названия модели

has_many :session_players 
Смежные вопросы