You need to enable JavaScript to run this app. Rails渲染nil User报undefined method `name' for nil:NilClass解决办法
优惠活动
大模型
产品
解决方案
定价
更多

Rails渲染nil User报undefined method `name' for nil:NilClass解决办法

错误原因

你设置的optional: true仅作用于ActiveRecord的关联校验环节,允许这三个裁判关联字段存nil值,不会在保存Assignment时触发「关联对象必须存在」的校验错误,但它不会处理视图层调用nil对象方法的逻辑,你直接对nil值调用name方法自然会抛出undefined method 'name' for nil:NilClass错误。

解决方案

你只需要在视图中调用name前增加nil判断即可,最便捷的方式是使用Ruby的安全导航操作符&.,当关联对象为nil时会直接返回nil,渲染到页面就是空白,完全符合你的需求,修改后的_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>

如果使用的是低版本Ruby不支持&.,也可以替换为Rails提供的try方法,写法为game.assignment.center_referee.try(:name),效果一致。

可选优化

你当前Game模型中的after_save :create_assignment回调会在每次更新Game实例时都创建一条新的Assignment记录,建议改成after_create :create_assignment,仅在Game首次创建时生成关联的Assignment即可,避免产生冗余数据。

内容的提问来源于stack exchange,提问作者wayoh22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 06:48:04