我是Ruby on Rails的新手,按照博客教程,我注意到它将new
和edit
与create
和update
区分开来。这很好,但我发现如果验证启动并且保存失败,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
答案 0 :(得分:0)
第一个答案:刷新后,POST
使浏览器将表单重新发送到服务器,其参数与之前完全相同,因此结果相同。而点击地址栏并提示输入会对该网址发出正常的GET
请求。
第二个回答:是的,那是可能的,但你是独立的。您必须自己定义路由,因为您不能再使用Rails的restful资源了。您可能需要更改link_to
方法或某些表单助手的行为。
我认为与Rails惯例作斗争是不值得的。