我有个人资料模型和用户has_one个人资料。
这是我的路线:
resources :users
resources :profiles
这是我控制器中的show方法:
def show
@profile = @user.profile
end
当我尝试访问show view时,为什么会出现此错误:
NoMethodError in ProfilesController#show
undefined method `profile' for nil:NilClass
答案 0 :(得分:1)
您需要初始化@user
实例变量。你可能想做这样的事情:
def show
@user = User.find(params[:id])
@profile = @user.profile
end
无聊解释:默认情况下,实例变量(前面带有@
的变量)为nil
。它们实际上可以通过为其分配非零值来“实例化”。这里,@user
是一个实例变量,它指向nil,因为它没有被赋值。在profile
的上下文中调用nil
,它没有profile
方法,因此您获得了no方法异常。这与局部变量相反,从一个较小的字母开始,在这种情况下会引发一个未找到异常的局部变量。
答案 1 :(得分:0)
因为@user
对象是nil
?在尝试使用它之前,您是否填充了@user
实例变量?
答案 2 :(得分:0)
那是因为@user是nil,你需要这样的东西
def show
@user = User.find(params[:id])
@profile = @user.profile
end