2011-03-11 15 views
4

路由文件中是否有方法检查和验证URL参数。我不是在谈论宁静'/控制器/行动/:ID'参数,但'控制器/行动?param1 = x & param2 = y & param3 = z'。我需要能够验证每个参数并要求它们。如何在rails 3中需要和检查url参数

回答

7

是的,你可以。例如检查参数1存在而不是空白的,你会做到以下几点:

match 'c/action' => 'c#action', :constraints => lambda{ |req| !req.params[:param1].blank? } 

您还可以范围这些限制将它们应用到多条路线:

scope :constraints => lambda{ |req| !req.params[:param1].blank? } do 
    match 'controller/action1' => 'controller#action1' 
    match 'controller/action2' => 'controller#action2' 
end 
2

与约束问题的方法概述通过泛Thomakos是它会阻止具​​有无效参数集的URL到达您的代码库,并且您能够以有意义的方式响应用户(用户将看到页面未找到错误,我相信)。

如果那符合您的要求,那很好,但更友好的方法是将参数验证移动到相应的控制器中,在您的操作方法中,您将通过此操作方法收到的参数集,任何需要的都丢失了,你会构造一个含义错误的消息,并通过以下方法将错误返回给用户:notice

+0

实际上,它的工作原理是完美的,用户永远无法访问没有传递参数的页面。网址是由另一个系统生成的,并且对用户是透明的。这是一个非常特殊和奇怪的情况。 – pho3nixf1re 2011-03-13 05:39:49

相关问题