【问题标题】:how to require and check url parameters in rails 3如何在rails 3中要求和检查url参数
【发布时间】:2011-03-11 22:31:51
【问题描述】:

您的路由文件中是否有方法可以检查和验证 URL 参数。我不是在谈论 '/controller/action/:id' 参数,而是 'controller/action?param1=x&param2=y&param3=z'。我需要能够验证每个参数并要求它们。

【问题讨论】:

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


    【解决方案1】:

    是的,你可以。例如,要检查 param1 是否存在且不为空,您可以执行以下操作:

    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】:

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

      如果满足您的要求,那很好,但更用户友好的方法是将参数验证移动到相应的控制器中,在您的操作方法中,您将通过该操作方法收到的参数集以及如果有的话缺少所需的,您将构建一个有意义的消息并通过 a:notice 将其错误返回给用户

      【讨论】:

      • 实际上它工作得很好,如果没有传递的参数,用户应该永远无法访问页面。 url 是从另一个系统生成的,对用户是透明的。这是一个非常具体和奇怪的案例。
      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2014-01-29
      相关资源
      最近更新 更多