ActiveRecord has_many关联null

时间:2014-11-19 06:22:45

标签: ruby-on-rails ruby activerecord

我有3个相互作用的模型:

  • Sessions
  • 每个Session都有多个SessionPlayer s
  • 每个SessionPlayer都属于Player

在关联的Session索引上,我试图显示给定会话的会话播放器列表,以及每个会话播放器的播放器名称 - 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创建的样板(控制器和模型也是如此),但如果需要,我可以发布它们。

1 个答案:

答案 0 :(得分:3)

我认为问题在于您使用了session_player,但它应该是session_players,而是使用此行代替

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

在您的模型中,由于您使用的是has_many,因此您应该使用复数形式的模型名称

has_many :session_players
相关问题