2011-03-27 127 views
0

我有一個配置文件模型,並有一個用戶has_one配置文件。爲什麼我會得到「未定義的方法」?

這裏是我的路線:

resources :users 
resources :profiles 

下面是我的控制器的顯示方法:

NoMethodError in ProfilesController#show 

undefined method `profile' for nil:NilClass 

def show 
    @profile = @user.profile 
end 

爲什麼當我嘗試訪問放映視圖我得到這個錯誤

回答

1

您需要初始化@user實例變量。你可能想要做這樣的事情:

def show 
    @user = User.find(params[:id]) 
    @profile = @user.profile 
end 

鏜解釋:實例變量(在前面加上@的那些)是nil默認。通過給它分配一個非零值,它們可以事實上被「實例化」。在這裏,@user是一個實例變量,它指向nil,因爲它沒有被分配任何東西。 profilenil的上下文中調用,該方法沒有profile方法,因此您將得到no方法異常。這與本地變量相反,從較小的字母開始,在這種情況下會引發一個局部變量未找到異常。

+0

現在我得到這個錯誤:'的ActiveRecord :: RecordNotFound在ProfilesController#顯示 找不到用戶與ID = 2' – 2011-03-27 04:43:27

+0

哈哈一模一樣的答案 – Shiv 2011-03-27 04:43:34

+0

確定這是因爲用戶不存在,嘗試傳入一些其他的ID,它應該工作 – Shiv 2011-03-27 04:43:57

0

因爲@user對象是nil?嘗試使用它之前,您是否填充@user實例變量?

0

這是因爲@user是零,你需要像這樣

def show 
    @user = User.find(params[:id]) 
    @profile = @user.profile 
end 
相關問題