2010-11-22 28 views
0

我有一個問題在rails中,我有兩個模型(訂單和狀態)之間基本的多對多關係。這些模型如下所示:「未定義的方法`名稱爲零:NilClass」創建新實例時

class Order < ActiveRecord::Base 
    has_many :products, :through => :lines 
    has_and_belongs_to_many :statuses 

    default_scope order("#{table_name}.created_at desc") 
end 

class Status < ActiveRecord::Base 
    has_and_belongs_to_many :orders 

end 

在訂單我的索引視圖,我卻顯示訂單的最新狀態,所以order.statuses.last.name,當我創建新的訂單時,我收到一個錯誤。此錯誤是針對未定義的方法名稱的,因爲新訂單在第一次創建時沒有任何關係。

我的問題是,有沒有辦法在保存新訂單之前初始化兩個模型之間的關係?我希望我的訂單始終至少在我的狀態集合中具有第一個狀態,但不希望在保存前不得不手動檢查它。

誤差爲好措施是:

undefined method `name' for nil:NilClass 

此行中我的觀點:

<td><%= order.statuses.last.name %></td> 

感謝所有。

+0

好吧,爲了初始化`statuses`你要麼必須對它進行硬編碼,要麼打到數據庫。那麼爲什麼不保存然後繼續呢?除非您緩存狀態數組並以這種方式初始化您的訂單。 – Jeremy 2010-11-22 17:57:45

回答

0

如果沒有最後的狀態或最後的狀態沒有名字這應該照顧

<td><%= order.statuses.last.try(:name) %></td> 
1

一個簡單的修正:

<td><%= order.statuses.last.name if order.statuses %></td> 
+0

謝謝馬克。玩這個,因爲我的某些情況有混合的結果。我能夠成功地執行以下操作:​​<%= order.statuses.last if order.statuses%> - 但我不能這樣做​​<%= order.statuses.last.name if order.statuses%>。我的猜測是,這是因爲.name方法來自我的狀態模型,並且如果這是零,它仍不知道如何響應?我想我必須在保存這個.name方法之前初始化關係才能被識別?再一次,非常感謝你,我真的很感謝你的幫助。 – Kombo 2010-11-22 17:20:53

相關問題