0

我阅读了 ruby​​ 指南的这一部分:http: //guides.rubyonrails.org/routing.html

把东西塞进 CRUD 并不总是理想的。我有一个案例,我希望在调查通过并重新验证所有数据确实已填写后有一个最终的“提交”按钮(因为您可以分部分进行调查,它将保存并验证到数据库),但对于最终提交,必须填写所有内容。所以我提交link_to 我想在控制器中调用一个方法:

在我看来:

<%= link_to "Submit", :action => 'final_verify', :document_id => @document.id  %>  

现在我使用 wicked 作为向导控制器,所以我必须创建一个匹配的路由,这样这个调用才会起作用:

路线.rb:

  #match route so I can call from page_controller.rb
  match ':controller/:action/:id'

所以这有效,它运行等,但问题是如果 final_verify 中有错误我想重定向到特定页面,我是否为此创建路由?还是我只需要修改redirect_to 才能正确执行此操作?我似乎无法找出最好/正确的方法来做到这一点?

我不相信我的匹配路线甚至是正确的方法,只是让 link_to 调用最终验证并转到有问题的页面(如果有),以便用户可以完成所需的部分并尝试再次提交。(部分让我感到困惑的是如何使用 wicked gem https://github.com/schneems/wicked

4

1 回答 1

0

您创建的路由实际上是一个遗留的“野生控制器”路由(只有 action 和 id 不是可选的),它将匹配任何控制器、action 和 id。如果您正在开发 RESTful 应用程序,则不建议这样做。

如果您为特定目的创建命名路由会更好:

match 'submit/:document_id' => 'your_controller#final_verify', :as => :final_verify

第一部分是可用的 url,中间部分是应该调用的控制器和动作,第三部分是路由名称,它将为您提供视图和控制器中的final_verify_pathfinal_verify_url方法。因此,您的 link_to 调用将如下所示:

<%= link_to "Submit", final_verify_path(:document_id => @document.id)  %>

要在提交不完整的调查后显示错误,您基本上有 2 个选项:

  • 根据您的操作呈现模板
  • 重定向到不同的操作

似乎您想做第二个,因此您需要redirect_to在控制器中执行一个操作来显示错误,例如在正确的向导页面上。如果您保持原有路线不变,您可能无需执行任何其他操作。但是如果你选择使用命名路由,你只需要定义另一个路由并在重定向中使用它。

于 2012-12-20T16:19:30.330 回答