2010-07-08 64 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 

那麼這個問題就不會發生了。

相關問題