为什么我得到“未定义的方法”?

时间:2011-03-27 04:38:06

标签: ruby-on-rails ruby ruby-on-rails-3 methods

我有个人资料模型和用户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

3 个答案:

答案 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