防止 nil:NilClass 的未定义方法“名称”呈现 nil 用户对象
Prevent undefined method `name' for nil:NilClass for rendering nil User object
在我的登陆页面上,我试图列出一个游戏模型的所有实例以及与之关联的相应分配模型。创建游戏时,也会创建作业。唯一传递给该作业的是 game_id。其他 3 个参数保留为零。如何在没有 undefined method 'name' for nil:NilClass
的情况下显示游戏。我认为这可以通过设置 optional: true
来解决,但我想不会。
我确实在 _feed.html.erb 文件中了解到它会返回该错误,因为它需要一个用户对象,所以我是否只需要在其中加入一些逻辑来防止这种情况发生?最后,如果center_referee
、assistant_referee_1
、and/or、assistant_referee_2
还没有设置,我需要它显示空白
_feed.html.erb
<div>
<% @games.each do | game | %>
<p ><%= game.home_team %> vs <%= game.away_team %></p>
<p >Center Referee: <%= game.assignment.center_referee.name %></p>
<p >AR1: <%= game.assignment.assistant_referee_1.name %></p>
<p >AR2: <%= game.assignment.assistant_referee_2.name %></p>
<br></br>
<% end %>
</div>
models/game.rb
class Game < ApplicationRecord
has_one :assignment, dependent: :destroy
has_many :users, through: :assignment
after_save :create_assignment
def create_assignment
Assignment.create(game_id: id)
end
end
models/assignment.rb
class Assignment < ApplicationRecord
belongs_to :game
belongs_to :center_referee, class_name: 'User', optional: true
belongs_to :assistant_referee_1, class_name: 'User', optional: true
belongs_to :assistant_referee_2, class_name: 'User', optional: true
accepts_nested_attributes_for :game
end
在我的登陆页面上,我试图列出一个游戏模型的所有实例以及与之关联的相应分配模型。创建游戏时,也会创建作业。唯一传递给该作业的是 game_id。其他 3 个参数保留为零。如何在没有 undefined method 'name' for nil:NilClass
的情况下显示游戏。我认为这可以通过设置 optional: true
来解决,但我想不会。
我确实在 _feed.html.erb 文件中了解到它会返回该错误,因为它需要一个用户对象,所以我是否只需要在其中加入一些逻辑来防止这种情况发生?最后,如果center_referee
、assistant_referee_1
、and/or、assistant_referee_2
还没有设置,我需要它显示空白
_feed.html.erb
<div>
<% @games.each do | game | %>
<p ><%= game.home_team %> vs <%= game.away_team %></p>
<p >Center Referee: <%= game.assignment.center_referee.name %></p>
<p >AR1: <%= game.assignment.assistant_referee_1.name %></p>
<p >AR2: <%= game.assignment.assistant_referee_2.name %></p>
<br></br>
<% end %>
</div>
models/game.rb
class Game < ApplicationRecord
has_one :assignment, dependent: :destroy
has_many :users, through: :assignment
after_save :create_assignment
def create_assignment
Assignment.create(game_id: id)
end
end
models/assignment.rb
class Assignment < ApplicationRecord
belongs_to :game
belongs_to :center_referee, class_name: 'User', optional: true
belongs_to :assistant_referee_1, class_name: 'User', optional: true
belongs_to :assistant_referee_2, class_name: 'User', optional: true
accepts_nested_attributes_for :game
end