2011-03-11 42 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

相關問題