【发布时间】:2011-03-11 22:31:51
【问题描述】:
您的路由文件中是否有方法可以检查和验证 URL 参数。我不是在谈论 '/controller/action/:id' 参数,而是 'controller/action?param1=x¶m2=y¶m3=z'。我需要能够验证每个参数并要求它们。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3
您的路由文件中是否有方法可以检查和验证 URL 参数。我不是在谈论 '/controller/action/:id' 参数,而是 'controller/action?param1=x¶m2=y¶m3=z'。我需要能够验证每个参数并要求它们。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3
是的,你可以。例如,要检查 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
【讨论】:
Pan Thomakos 概述的约束方法的问题在于,它会阻止具有无效参数集的 url 到达您的代码库,并且您能够以有意义的方式响应用户(用户将看到找不到页面我相信错误)。
如果满足您的要求,那很好,但更用户友好的方法是将参数验证移动到相应的控制器中,在您的操作方法中,您将通过该操作方法收到的参数集以及如果有的话缺少所需的,您将构建一个有意义的消息并通过 a:notice 将其错误返回给用户
【讨论】: