2012-09-11 19 views
1

我試圖讓這個代碼片段從sinatra教程工作,以便我可以設置一些基於正則表達式匹配的路線。它似乎沒有工作,我直接從教程複製粘貼,關於我失蹤的任何想法。假設我的sinatra應用程序正在工作,並且我有其他正確結構化的GET路徑工作,所以我不清楚爲什麼直接複製這樣的過程不起作用。如何配合Sinatra的正則表達式路線?

get %r{/hello/([\w]+)} do 
    "Hello, #{params[:captures].first}!" 
end 

應該正確映射路線http://0.0.0.0:4567/hello但路由到「西納特拉不知道這首小曲」錯誤消息。

Thks。

+1

快速的問題是你複製並粘貼你的代碼後重新啓動Web服務器。要麼是或使用一個gem像shutgun重新加載網頁後請求 – Egryan

+0

通常重新啓動Web服務器是煩人的,我會加載shutgun,看看它是否有效,謝謝。 – John

回答

2

%r{/hello/([\w]+)}根本不匹配/hello。你的正則表達式需要一個斜槓和另一個字符串,但你的路徑不包括那個。

該路線將匹配/hello/there但不是/hello甚至/hello/

的,而且是你正在尋找的捕獲,你可能甚至不希望這與/hello在所有的工作,因爲這捕捉會nil,誰不想打招呼nil

+0

感謝和有趣的我正在試驗rubular我不能期望%r {/./}做...結束路由匹配根上的任何事情?我無法完成這項工作。重新捕捉零,是的,這是正確的,但我不關心運行的代碼,更關心正則表達式匹配路線的能力,即我想matcha幾條路線,然後基本上正則表達式匹配各種其他的東西幾個得到請求,這是純粹的教育,我的部分,感謝輸入。 – John