【问题标题】:Why does rails redirect to the show action after creating?为什么rails在创建后会重定向到show action?
【发布时间】:2015-05-12 22:15:51
【问题描述】:

这里是新的网络开发人员,我想我可能缺少一些非常基础的知识。 给定代码

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 已经在 create 方法中定义并定义为 Post.new(post_params) . 当我redirect_to @post 时,它不会简单地再次调用该行吗?

【问题讨论】:

    标签: ruby-on-rails rails-routing


    【解决方案1】:

    让我们看看你的代码

    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只是渲染new动作的视图而不是调用new 动作,只渲染视图,因为new.html.erb 包含表单。

    希望这有帮助!

    【讨论】:

    • 感谢您的解释!如果我错了,请纠正我,但这是否意味着 redirect_to 将始终返回到 show 操作?我可以重定向到别的东西吗?
    • 是的,当然,试试redirect_to "http://google.com",它会重定向到google,你可以通过重定向传递任何url
    • 我的代码与 OP 完全相同,但我的 if 块是空的,它仍然不断将我重定向到创建页面,为什么会这样?
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多