首页 > 解决方案 > 防止 nil:NilClass 的未定义方法“名称”用于呈现 nil 用户对象

问题描述

在我的登录页面上,我试图列出 Game 模型的所有实例以及与之关联的相应 Assignment 模型。创建游戏时,也会创建一个作业。唯一传递给该作业的是 game_id。其他 3 个参数为零。如何在没有undefined method 'name' for nil:NilClass. 我认为这可以通过optional: trueset 解决,但我想不会。

我确实在 _feed.html.erb 文件中理解它正在返回该错误,因为它需要一个用户对象,所以我只需要在其中加入一些逻辑来防止这种情况发生吗?最后,如果还没有设置、 和/或center_referee,我需要它显示空白assistant_referee_1assistant_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

标签: ruby-on-railsmodelcontroller

解决方案


利用&

game.assignment.center_referee&.name

它是一个安全导航运算符,在 Ruby 2.3.0 中引入。您可以在此处找到文档

如果您想了解更多信息,可以在此处获取(由@crodev发送)


推荐阅读