2012-01-10 73 views
2

我在我的rails應用程序中使用friendly_id作爲我的路線。確定字符串是否僅包含數字

我想確保一個頁面不能被數字ID訪問。

頁是這樣的訪問 - www.myurl.com/myfriendlyidstub

的頁面不應該是這樣的訪問 - www.myurl.com/12345(12345 myfriendlyidstub的ID)

我無法在friendly_id的文檔中找到這樣做的方法。

所以我正在考慮在我的控制器中添加一個方法來檢查帕拉姆是否是數字

def edit 
    if params[:id].is_numeric? #I need to know how to write this method 
     not_found #not_found redirects to a 404 
    end 
    #rest of the edit action 
end 

兩個問題 -

我怎樣寫「is_numeric」的方法?

這是做事的好方法嗎?你能看到任何陷阱嗎?

+1

你可能想看看[這個鏈接](http://railsforum.com/viewtopic.php?id=19081)。我沒有看到這種方法的問題,儘管我認爲*如果你喜歡,你可以在路由本身中執行正則表達式。 – aishwarya 2012-01-10 12:11:26

+0

另一方面,白名單將是比黑名單更好的方法(指定什麼是有效的輸入,而不是指定無效的輸入) – 2012-01-10 12:45:44

回答

4

我會使用before_filter,然後再堅持每種方法。

您也可以配置路由segment constraint

0

這聽起來像你只是想根「/」之後有用戶名作爲永久...

config/route.rb 
... 
match '/:id' => 'controller#show' 
... 

之後,我相信,如果你設置友情它正確地它應該顯示爲名稱而不是一個id。

btw感謝您找到friendly_id,我即將開始爲我的項目尋找類似的東西。

讓我知道是否有幫助。

+0

這就是我最初設置的方式 - 但我的問題是我想遮掩實際的Ids。我根據公認的答案所做的。雖然Friendly_id工作得很好。 git集線器上的回購所有者也非常有幫助。 – Finnnn 2012-01-10 13:17:40

相關問題