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

时间:2015-03-11 08:02:02

标签: ruby-on-rails rails-routing

这里有新的网络开发人员,我想我可能会遗漏一些非常基础的知识。 鉴于代码

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 时,它是否只是再次调用该行?

1 个答案:

答案 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包含表单。

希望这有帮助!