2013-04-17 90 views
2

我收到此錯誤。嘗試訪問相關記錄時未定義的方法

undefined method `email' for nil:NilClass 

當我嘗試訪問我的相關模型記錄,像這樣:

用戶模型:

has_one :facility 

用戶設施:

belongs_to :user 

設施控制器的

@adminfacilities = Facility.all 

Index.html.erb

@adminfacilities.each do |facility| 
    facility.user.email 

我只是不明白我在做什麼錯在這裏。 爲什麼我無法訪問這些信息?

非常感謝!

+0

不是一個答案,而是你的代碼的一個優化:寫'@adminfacilities = Facility.find(:all,:include =>:user)'如果你知道你將訪問你的設施對象的'user'反射。 – pierallard

+0

這是對的,但我需要在沒有用戶分配給它的設施上進行。 Thanksanyway,因爲這是一個很棒的提示。 – alemur

回答

2

由於一些facility.usernil,你可以使用:

@adminfacilities.each do |facility| 
    facility.user.try(:email) 
+0

這個工程,你能很快解釋爲什麼嗎?試試做什麼?謝謝! – alemur

+1

a.try(:method)如果a不爲零,則在其他位置呈現nil。 – pierallard

2

正如xdazz說,你facility.usernil

也許你應該在你的設施模型

validates_presence_of :user 

而且依賴添加一個驗證的破壞

belongs_to :user, :dependent => :destroy 
0

本身看起來不錯的代碼。

我認爲原因是您使用的是開發模式,並沒有創建正確的關聯數據。

建議您再次檢查數據以查看任何設施記錄是否沒有user_id。

此外,強烈建議按照ForgetTheNorm的說法添加驗證。

1

你可能有一個Facility沒有外鍵分配給它用戶,當foreach循環到達該工廠發現,沒有分配的用戶,因此,它不能返回用戶的屬性你正在尋找,在這種情況下,email

檢查數據庫設施表,將有可能會是一個user_idnil

0

一些相應的設施沒有用戶,所以它是返回零。

然後從用戶表u或嘗試訪問電子郵件。所以通過零的例外:NilClass(用戶nilclass)

我們可以這樣寫

facility.user一些最能理解的代碼? facility.user.email:無#將設施用戶是那裏,如果用戶的回報,然後它會給用戶電子郵件否則返回nil

(或)

facility.user.try(:電子郵件)

相關問題