我是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 here。作为用户,当我点击“提交”以保存帖子并将字段留空时,会加载“新”的html,但我发送的网址是“/ posts”而不是“posts / new”。我的路线可能搞砸了吗?
答案 0 :(得分:2)
您所看到的是正确的行为。当您发布帖子请求时,URL应该更改为您要发布到的任何URL。
如果您希望网址成为新网址,那么您应该在控制器中进行重定向而不是渲染。但是当您进行重定向时,您将丢失所有与验证相关的信息。
答案 1 :(得分:1)
我认为你对render和redirect_to的工作原理感到困惑。 渲染不会像redirect_to一样向服务器发送新请求
当您提交表单时,您发送一个帖子请求/帖子到您的服务器,因此网址更改为/ posts但在您的创建方法中您有验证错误,因此您的操作呈现新操作但渲染不会向服务器发送新请求,因此您的网址仍然相同。 结帐render and redirect_to works