Ruby on rails Rails 5路由和表单提交
我正在尝试确定处理表单提交和路由的最佳方式 我有标准的_form.html.erb,以及new.html.erb和edit.html.erb-每个呈现Ruby on rails Rails 5路由和表单提交,ruby-on-rails,Ruby On Rails,我正在尝试确定处理表单提交和路由的最佳方式 我有标准的_form.html.erb,以及new.html.erb和edit.html.erb-每个呈现form,subscription=@subscription,它们在new和edit控制器操作中声明 模型是subscription,这是我的表单元素在_form.html.erb中(它在签出命名空间中)- /checkout/subscriptions/new是新订阅的URL。提交表单时,它将发布到/subscriptions 问题是,如果
form
,subscription=@subscription
,它们在new
和edit
控制器操作中声明
模型是subscription
,这是我的表单
元素在_form.html.erb中(它在签出
命名空间中)-
/checkout/subscriptions/new
是新订阅的URL。提交表单时,它将发布到/subscriptions
问题是,如果出现错误,并且您刷新浏览器(我知道用户会出于某种原因这样做),您会收到一条错误消息,因为没有/subscriptions/index
(我不需要)的视图
这同样适用于编辑。如果你去(举例来说)/checkout/subscriptions/14/edit
,一切都很好。但是,如果您提交表单,它将发布到/subscriptions
-与new的问题相同-如果您刷新页面,则会出现无视图错误。这是Rails使用新脚手架处理它的方式
因此,我的问题是:
- 在
标签的
表单中,我应该使用什么url
- 我应该为路由做什么
- 如何在刷新页面时避免此错误
- 这就是rails版本REST的工作原理(并且应该工作)。这里的关键是HTTP方法
重新加载页面将创建一个
GET
请求。而控制器应使用POST
创建资源,并使用PATCH/PUT
进行更新
(不创建、更改或删除资源)因此对/subscriptions
或/subscriptions/:id
的GET请求是非常不同的
你能做什么:
- 使用javascript中的
事件警告用户他们将丢失数据窗口.beforeunload
- 将
路径路由到GET/subscriptions
subscriptions\new
- 将
路径路由到GET/subscriptions/:id
subscriptions\edit
- 这就是rails版本REST的工作原理(并且应该工作)。这里的关键是HTTP方法
重新加载页面将创建一个
GET
请求。而控制器应使用POST
创建资源,并使用PATCH/PUT
进行更新
(不创建、更改或删除资源)因此对/subscriptions
或/subscriptions/:id
的GET请求是非常不同的
你能做什么:
- 使用javascript中的
事件警告用户他们将丢失数据窗口.beforeunload
- 将
路径路由到GET/subscriptions
subscriptions\new
- 将
路径路由到GET/subscriptions/:id
subscriptions\edit
<%= form_for([:checkout, subscription]) do |f| %>