0

我有一个带有用户模型和 Instructor_Profile 模型的简单应用程序。这两个模型之间的关联是一对一的。我无法让我的视图 show.html.erb 呈现。我只是想显示 Instructor_Profile 模型中的单个属性,但出现此错误:

Instructor_profiles 中的 NoMethodError #show undefined method `name' for nil:NilClass

任何帮助将不胜感激!

Models:

class User
has_one :instructor_profile

class InstructorProfile
belongs_to :user


UsersController:

def new
  @user = User.new
end


def create
  @user = User.new(params[:user])
  if @user.save
    UserMailer.welcome_email(@user).deliver
    render 'static_pages/congratulations'
  else
    render 'new'
  end
end



InstructorProfilesController:

def new
  @instructor_profile = current_user.build_instructor_profile
end


def create
  @instructor_profile = current_user.build_instructor_profile(params[:instructor_profile])
  if @instructor_profile.save
    flash[:success] = "Profile created!"
    redirect_to root_path
  else
  ....
  end
end


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



Views/instructor_profiles/show.html.erb:

<p>Display Name: <%= @user.instructor_profile.name %></p> 
4

1 回答 1

0

它发生是@user.instructor_profile因为nil. 这意味着没有与@user. 请检查create里面的方法UserController来确认是否instructor_profile正在创建。代码应该是这样的,

@user.instructor_profile = InstructorProfile.new(name: "my_name")
@user.instructor_profile.save

编辑:

has_one 关联并不意味着每个用户都必须有一个instructor_profile。所以在你打电话之前@user.instructor_profile.name,只要确认@userinstructor_profile没有。在您看来,您可以通过添加一个条件轻松解决此错误。

<p>Display Name: <%= @user.instructor_profile ? @user.instructor_profile.name : "no instructor_profile present" %></p>.

还有一件事,在 中instructor_profiles_controller/show,将代码更改为

@instructor_profile = InstructorProfile.find(params[:id])
 @user = @instructor_profile.user
于 2013-04-24T06:30:38.570 回答