【问题标题】:Undefined method for nil:NilClass on an association viewnil 的未定义方法:关联视图上的 NilClass
【发布时间】:2026-02-05 01:15:01
【问题描述】:

图库有_many 张照片。 照片属于图库

在我的照片“显示”视图中,我收到错误“nil:NilClass”的未定义方法“名称”

<%= @photo.gallery.name %>

该错误仅出现在不属于画廊的照片(没有为其分配画廊名称)的照片上,这些照片按预期显示,即显示画廊名称属于它。 api说“如果你在一个不响应它的对象上调用一个方法,Ruby会引发NoMethodError”,但是即使它是空的,照片对象也不应该响应gallery.name吗?由于模型已正确关联...

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你可能没有意识到,但你正在做方法链。

    @photo.gallery 返回与照片关联的 Gallery 对象。 @photo.gallery.name 返回与照片关联的 Gallery 对象关联的名称。

    可能更容易将其视为(@photo.gallery).name

    以下相当于你的代码:

    <% @gallery = @photo.gallery %>
    <%= @gallery.name %>
    

    在您的情况下,当照片没有图库时,@photo.gallery 返回 nil。您只需要检查一下:

    <%= @photo.gallery.name unless @photo.gallery.nil? %>
    

    或者在它不存在时有一个替代案例,无论你想要什么。

    【讨论】:

    • 一点也不,非常好用。请记住,Ruby 从左到右计算,例如"123".to_i.to_s.size 将首先将“123”转换为整数,然后返回字符串,然后返回字符串的大小(即 3)。当方法返回值可能为 nil 时,您只需要小心链接方法。
    【解决方案2】:

    如果图库是照片的必填项,最好在照片模型中定义。

    validate_presence_of :gallery_id
    

    那么就不会出现这个问题了。

    【讨论】:

      最近更新 更多