Ruby on rails 3 Rails-Show Action&;具有一对一关联的模型的视图?
我有一个简单的应用程序,带有一个用户模型和一个讲师档案模型。这两个模型之间的关联是一对一的。我无法获取要渲染的视图show.html.erb。我只是试图显示讲师_配置文件模型中的单个属性,但出现以下错误: 讲师档案中的命名错误#显示 nil:NilClass的未定义方法“name” 任何帮助都将不胜感激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
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操作的调整修复了问题。我还将在我的视图中添加条件。非常感谢你的帮助!