2011-03-27 122 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 
相关问题