use*_*633 5 ruby-on-rails rails-routing
这里是新的Web开发人员,我想我可能会遗漏一些非常基础的知识.鉴于代码
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render "new"
end
end
Run Code Online (Sandbox Code Playgroud)
为什么视图模板重定向到def show动作?如果我没有定义def show及其相应的视图,rails会给我一个错误.
我只是不明白为什么即使在我保存帖子后代码是redirect_to @post,它似乎在创建帖子后重定向到显示页面.这只是其中之一,我应该把它当作它,或者我错过了一些基本的HTML协议知识(我真的不知道很多)?
编辑:为了进一步澄清我的问题,我看到@post已经在create方法中定义,并被定义为Post.new(post_params).当我redirect_to @post时,它不会再简单地调用那行吗?
Raj*_*ngh 10
让我们来看看你的代码
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render "new"
end
end
Run Code Online (Sandbox Code Playgroud)
为什么视图模板重定向到def show动作?如果我没有定义def show及其相应的视图,rails会给我一个错误.
在create操作中,您正在创建一个新记录,所以如果你看一下代码的这一部分
if @post.save
redirect_to @post
Run Code Online (Sandbox Code Playgroud)
当@post保存成功,我们重定向它显示的写入工作redirect_to @post,为实际路线show的行动将是post_path(@post)这样,你也可以写redirect_to post_path(@post),但即使你只需通过与目标redirect_to轨道将其重定向到show动作.现在进入这一else部分
else
render "new"
Run Code Online (Sandbox Code Playgroud)
如果@post对象没有保存在数据库中(由于验证),我们想要重新加载表单,因此在上面的代码render中只是呈现new操作视图而不是调用new操作,因为只new.html.erb包含表单而呈现视图.
希望这有帮助!
| 归档时间: |
|
| 查看次数: |
8244 次 |
| 最近记录: |