nil的未定义方法:关联视图上的NilClass

时间:2010-07-08 22:37:33

标签: ruby-on-rails

Gallery has_many照片。 照片belongs_to gallery

在我的照片'show'视图中​​,我得到nil的错误'undefined method`name':行的NilClass'

<%= @photo.gallery.name %>

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

2 个答案:

答案 0 :(得分:4)

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

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

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

以下内容相当于您的代码:

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

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

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

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

答案 1 :(得分:0)

最好在照片模型中定义画廊是照片必须的。

validate_presence_of :gallery_id

然后就不会发生这个问题了。