2012-09-20 61 views
2

我是Rails和Ruby的新手,實際上它是我的第一個Web語言。這不是我的第一個項目,但它是迄今爲止的bigest,我在某個頁面(「主頁」頁面)遇到問題。我的Rails應用不喜歡我的屬性

的錯誤是:

NoMethodError in Home#index undefined method `avatar' for nil:NilClass 

提取的源(左右線#1):

1: <%= image_tag current_user.avatar.url(:thumb) %> 
2: <ul> 
3: <li><b>Name:</b><%= current_user.name %></li> 
4: <li><b>Username:</b><%= current_user.username %></li> 

所以它不喜歡我的屬性:(我應該在這種情況下在哪裏?我應該先看看嗎?這是一個問題控制器?

+0

高清CURRENT_USER @current_user || = User.find(會話[:USER_ID])如果會話[:USER_ID] 結束 是helper_method:CURRENT_USER –

+0

感謝您的答案和評論:) –

回答

3

的問題是,current_user正在返回nil

在誤差看看

NoMethodError in Home#index undefined method `avatar' for nil:NilClass 

紅寶石說你正試圖將nil對象上執行的實例方法avatar。看完你的代碼後,你應該能夠告訴你在current_user的返回值上調用avatar,所以你可以推斷current_user正在返回nil而不是用戶。

每點評:

爲了解決這個問題,你需要首先確定是否有current_user。然後,只有到那時,你試圖顯示用戶avatar或其他用戶屬性(nameusername ...)

有些人沒有在視圖喜歡邏輯,我傾向於採用這種做法。

爲了避免這種情況,您可以:創建一個包含邏輯的視圖助手。這個幫助器可能顯示/返回有關用戶的數據,也可能不顯示/返回。

沿if current_user ...

+0

的解決辦法是換行該代碼在<%if current_user.present? %>',這樣如果沒有登錄的用戶它不會拋出錯誤。 – Mischa

+0

'<%if current_user%>'應該足夠了。 – Kyle

+0

我建議刪除邏輯是否顯示current_users頭像視圖助手,因爲有可能或可能不是當前用戶。因此,在視圖代碼中,會有一個'display_avatar'視圖助手來決定是否顯示任何東西。這將保持視圖代碼清除邏輯代碼。 –

1

您正試圖獲取「CURRENT_USER」的化身東西線。系統抱怨,因爲它不知道誰或什麼是current_user。

您的current_user對象爲零。導致問題的代碼(可能構成您的應用程序或會話助手),您在哪裏設置current_user ...很可能是您找到問題根源的地方。