如果保存失败无法正常工作,则渲染’new’

我是rails的新手,正在通过构建一个简单的博客类型的应用程序来练习。 如果@ post.save由于字段留空而失败,我将PostsController设置为呈现’posts / new’页面。

def create @post = Post.new(post_params) if @post.save redirect_to @post else render 'new' end end 

这符合5.10。 作为用户,当我点击“提交”以保存post并将字段留空时,会加载“新”的html,但我发送的url是“/ posts”而不是“posts / new”。 我的路线可能搞砸​​了吗?

你所看到的是正确的行为。 当您发布post请求时,URL应更改为您要发布到的任何URL。

如果你想让url成为新的url,那么你应该在你的控制器中进行重定向而不是渲染。 但是当您进行重定向时,您将丢失所有与validation相关的信息。

我认为你对render和redirect_to的工作原理感到困惑。 渲染不会像redirect_to那样向服务器发送新的请求

当您提交表单时,您发送一个post请求/post到您的服务器,因此URL更改为/ posts但在您的create方法中您有validation错误,因此您的操作呈现新操作但渲染不会向您发送新请求服务器,因此您的url保持不变。 检查render and redirect_to works