如何在rails 3中要求和检查url参数

时间:2011-03-11 22:31:52

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

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

2 个答案:

答案 0 :(得分:8)

是的,你可以。例如,要检查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

答案 1 :(得分:2)

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

如果满足您的要求,那很好,但更方便用户的方法是将参数验证移动到相应的控制器中,在您的操作方法中,您将通过这个操作方法收到的一组参数,如果有的话如果缺少必需的,您将构造一个含义消息并通过:notice

将其错误地反馈给用户