这里有新的网络开发人员,我想我可能会遗漏一些非常基础的知识。 鉴于代码
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render "new"
end
end
为什么视图模板会重定向到 def show 操作?如果我没有定义 def show 及其相应的视图,rails会给我一个错误。
我只是不明白为什么即使代码是 redirect_to @post 我保存帖子后,它似乎在创建帖子后重定向到显示页面。这只是其中之一,我应该把它当作它,或者我错过了一些基本的HTML协议知识(我真的不知道很多)?
编辑:为了进一步澄清我的问题,我发现 @post 已在创建方法中定义,并定义为 Post.new(post_params) 当我 redirect_to @post 时,它是否只是再次调用该行?
答案 0 :(得分:10)
让我们来看看你的代码
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render "new"
end
end
为什么视图模板会重定向到def show动作?如果我没有定义def show及其相应的视图,rails会给我一个错误。
在create
操作中,您正在创建新记录,因此如果您查看代码的这一部分
if @post.save
redirect_to @post
成功保存@post
后,我们会通过编写redirect_to @post
重定向它以显示操作,show
操作的实际路由为post_path(@post)
,因此您也可以写redirect_to post_path(@post)
但即使您只是使用redirect_to
传递对象,rails也会将其重定向到show动作。现在转到else
部分
else
render "new"
如果@post
对象未保存在数据库中(由于验证),我们想重新加载表单,因此在上面的代码中render
只呈现{{1}的视图操作而不是调用new
操作,只显示视图,因为new
包含表单。
希望这有帮助!