Ruby on rails Rails 5路由和表单提交

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.html.erb,以及new.html.erb和edit.html.erb-每个呈现
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

          做到了@max-谢谢。我从来没有想到同一个控制器操作有多个路由。这是一个很好的解释。谢谢你。干杯这就做到了@max-谢谢你。我从来没有想到同一个控制器操作有多个路由。这是一个很好的解释。谢谢你。干杯
          <%= form_for([:checkout, subscription]) do |f| %>