2010-07-08 60 views
1

Gallery has_many照片。 照片belongs_to的画廊关于nil的未定义方法:关联视图上的NilClass

在我的照片“秀”鉴于我得到零错误“未定义的方法`名”:NilClass'为线

<%= @photo.gallery.name %> 

误差只在没有出现的照片画廊的一部分(没有画廊名称分配给他们)的那些,出现的预期即显示画廊名称,它属于。 api说:“如果你调用一个不响应它的对象的方法,Ruby会引发NoMethodError”,但是即使它是空的,照片对象也不应该响应gallery.name?因为模型正确关联...

回答

4

您可能没有意识到这一点,但您正在进行方法链接。

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

可能会更容易认为这是(@photo.gallery).name

以下是等同于您的代码:

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

在你的情况,如果照片没有画廊,@ photo.gallery返回nil。你只需要检查这个:

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

或者有一个替代的情况下,当它不存在,无论你想要的。

+0

谢谢, 方法链接不好?因为它看起来很混乱? – 2010-07-08 22:52:40

+0

一点都不,它非常有用。请记住,Ruby从左到右评估,例如'“123”.to_i.to_s.size'将首先将“123”转换为Integer,然后返回到String,然后返回字符串的大小(即3 )。在方法返回值可能为零时链接方法时,您只需要小心。 – Karl 2010-07-09 00:05:56

0

如果照片库是强制性的,最好在照片模型中定义。

validate_presence_of :gallery_id 

那么这个问题就不会发生了。

相关问题