为什么rails在创建后会重定向到show动作?

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包含表单而呈现视图.

希望这有帮助!

  • 是的,当然可以尝试 `redirect_to "http://google.com"`,它会重定向到 `google`,你可以通过重定向传递任何 `url` (2认同)