抑制rails 3中的link_to默认操作

时间:2012-12-20 15:59:53

标签: ruby-on-rails ruby ruby-on-rails-3

我读了红宝石指南的这一部分: http://guides.rubyonrails.org/routing.html

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

在我看来:

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

现在我使用邪恶作为向导控制器,sO我必须创建一个匹配的路由,以便这个调用可以工作:

routes.rb中:

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

所以这可行,它运行等,但问题是如果final_verify中有错误我想重定向到特定页面,我是否为此创建路由?或者我是否必须使用redirect_to来正确执行此操作?我似乎无法找出最佳/正确的方法来做到这一点?

我不相信我的匹配路线甚至是正确的方式去获取link_to来调用最终验证并转到违规页面(如果有的话),这样用户就可以完成所需的部分并再次尝试提交。 (部分是什么绊倒我是如何使用邪恶的宝石来做到这一点https://github.com/schneems/wicked

1 个答案:

答案 0 :(得分:0)

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

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

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

第一部分是可用的url,中间部分是应该调用的控制器和动作,第三部分是路径名称,它将为您提供final_verify_path和{{1视图和控制器中的方法。所以你的link_to调用看起来像这样:

final_verify_url

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

  • 根据您的操作呈现模板
  • 重定向到其他操作

好像你想要做第二个,所以你需要在控制器中<%= link_to "Submit", final_verify_path(:document_id => @document.id) %> 一个动作来显示错误,例如在正确的向导页面上。如果您保留原有路线,则可能不需要执行任何其他操作。但是如果你选择使用命名路由,你只需要定义另一条路由并在重定向中使用它。