我有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创建的样板(控制器和模型也是如此),但如果需要,我可以发布它们。
答案 0 :(得分:3)
我认为问题在于您使用了session_player
,但它应该是session_players
,而是使用此行代替
<% session.session_players.each do |player| %>
在您的模型中,由于您使用的是has_many
,因此您应该使用复数形式的模型名称
has_many :session_players