让用户在rails中保持编辑或新路由

时间:2016-06-27 11:12:44

标签: ruby-on-rails ruby

我是Ruby on Rails的新手,按照博客教程,我注意到它将neweditcreateupdate区分开来。这很好,但我发现如果验证启动并且保存失败,Rails会将用户返回到带有错误的表单...但它现在实际上显示的是不同的URL,因为表单不是指向同一页面。

例如,用户转到:/articles/new然后提交表单而不填写任何字段。表单(根据rails文档)指向/articles,这意味着用户在该URL上结束,但在控制器中,它被告知呈现new表单并刷新页面将继续显示new表格。

我的第一个问题是为什么即使在/articles页面进一步刷新后,新表单也会呈现?当然在刷新之后(它不会重新提交数据)它应该只是显示索引操作(因为那是我正在使用的URL)。但是,单击浏览器地址栏并点击返回,然后重新显示索引控制器操作方法。那么什么是刷新做的不同?为什么我没有得到通常的浏览器弹出窗口,说你在刷新时重新提交数据?

第二个问题 ...是否可以阻止这些网址更改?因此,如果用户转到:articles/1/edit并提交无效数据,则会将其保留在同一页面上,而不会转到articles/1

这是创建方法:

  def create
    @article = Article.new(article_params)

    if @article.save
      redirect_to @article
    else
      #redirect_to new_article_path
      render 'new'
    end
  end

我尝试通过将用户重定向回新页面而不是仅渲染新视图来解决问题。但是这会失去错误......

路线如下:

  resources :articles do
    resources :comments
  end

1 个答案:

答案 0 :(得分:0)

第一个答案:刷新后,POST使浏览器将表单重新发送到服务器,其参数与之前完全相同,因此结果相同。而点击地址栏并提示输入会对该网址发出正常的GET请求。

第二个回答:是的,那是可能的,但你是独立的。您必须自己定义路由,因为您不能再使用Rails的restful资源了。您可能需要更改link_to方法或某些表单助手的行为。

我认为与Rails惯例作斗争是不值得的。