Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails-Show Action&;具有一对一关联的模型的视图?_Ruby On Rails 3_Model View Controller - Fatal编程技术网

Ruby on rails 3 Rails-Show Action&;具有一对一关联的模型的视图?

Ruby on rails 3 Rails-Show Action&;具有一对一关联的模型的视图?,ruby-on-rails-3,model-view-controller,Ruby On Rails 3,Model View Controller,我有一个简单的应用程序,带有一个用户模型和一个讲师档案模型。这两个模型之间的关联是一对一的。我无法获取要渲染的视图show.html.erb。我只是试图显示讲师_配置文件模型中的单个属性,但出现以下错误: 讲师档案中的命名错误#显示 nil:NilClass的未定义方法“name” 任何帮助都将不胜感激 Models: class User has_one :instructor_profile class InstructorProfile belongs_to :user Users

我有一个简单的应用程序,带有一个用户模型和一个讲师档案模型。这两个模型之间的关联是一对一的。我无法获取要渲染的视图show.html.erb。我只是试图显示讲师_配置文件模型中的单个属性,但出现以下错误:

讲师档案中的命名错误#显示 nil:NilClass的未定义方法“name”

任何帮助都将不胜感激

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> 
型号:
类用户
有一个:讲师简介
课堂教师档案
属于:用户
用户控制器:
def新
@user=user.new
结束
def创建
@user=user.new(参数[:user])
如果@user.save
欢迎发送电子邮件(@user).deliver
呈现“静态页面/祝贺”
其他的
呈现“新”
结束
结束
讲师ProfilesController:
def新
@讲师配置文件=当前用户。生成讲师配置文件
结束
def创建
@讲师配置文件=当前用户。生成讲师配置文件(参数[:讲师配置文件])
如果@讲师_profile.save
flash[:success]=“已创建配置文件!”
将\重定向到根\路径
其他的
....
结束
结束
def秀
@user=user.find(参数[:id])
@讲师档案=@user.讲师档案
结束
视图/讲师档案/show.html.erb:
显示名称:


之所以发生这种情况,是因为
@user.讲师档案
nil
。 这意味着没有与
@用户
对应的讲师档案。 请检查
UserController
中的
create
方法,以确认
讲师档案
是否正在创建。代码应该是这样的

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

有一个关联并不意味着每个用户都必须有一个讲师档案。因此,在调用
@user.讲师档案.name
之前,只需确认
@user
是否具有
讲师档案
。在您看来,您可以通过添加一个条件轻松解决此错误

显示名称:

还有一件事,在
讲师配置文件\u控制器/show
中,将代码更改为

@instructor_profile = InstructorProfile.find(params[:id])
 @user = @instructor_profile.user

你试过@讲师_profile.name吗?你好,Soni。是的,我也试过。同样的结果。嗨,塔哈。我认为你在这个问题上是对的。但是,我不确定为什么我必须在UsersController中定义关于讲师配置文件的任何内容。也许我不完全理解这种联系。但我认为仅仅因为用户有一个讲师档案,并不意味着每个用户都必须有一个讲师档案。这不准确吗?此外,我刚刚为这两个控制器添加了我的新建和创建操作,供您查看。谢谢谢谢塔哈!在InstructorProfilesController中对show操作的调整修复了问题。我还将在我的视图中添加条件。非常感谢你的帮助!