渲染'新'如果保存失败无法正常工作

时间:2014-08-01 16:07:05

标签: ruby-on-rails

我是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”。我的路线可能搞砸​​了吗?

2 个答案:

答案 0 :(得分:2)

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

如果您希望网址成为新网址,那么您应该在控制器中进行重定向而不是渲染。但是当您进行重定向时,您将丢失所有与验证相关的信息。

答案 1 :(得分:1)

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

当您提交表单时,您发送一个帖子请求/帖子到您的服务器,因此网址更改为/ posts但在您的创建方法中您有验证错误,因此您的操作呈现新操作但渲染不会向服务器发送新请求,因此您的网址仍然相同。 结帐render and redirect_to works