2011-07-21 40 views
1

之前我在製作一個使用Sinatra的網站,一切都很順利,或者直到我需要訪問before塊中的params[]散列。Sinatra/Rack params []在

基本上,我試圖做到這一點:

before do 
    if params[:forum_id] 
    @forum = Forum.find(params[:forum_id]) 
    build_breadcrumbs(@forum.parents) 
    # ... more code, snipped to keep it short 
    end 
end 

但事實是,我不能調用params[]散在before塊,沒有任何人有什麼想法?

我把這段代碼放在before塊中的原因是我寧願不必去把它放在每個頁面的每個getpost塊中。

回答

6

從文檔:

前置過濾器相同的 上下文內的每個請求之前評估爲可能會出現路由和可以修改請求和響應。

由於這發生在實際請求之前,因此無法訪問請求參數。你可以做的是把重複的代碼放入一個方法中,並在你的路由塊中調用它。

+1

你的文章給了我一個嘗試'之前'/ f /:forum_id''(加上其他論壇頁面)和工作的想法。謝謝 :)。 – Kliknik

+0

歡迎您,很高興幫助! :-)爲了將問題標記爲已解決,您可以通過點擊投票計數下的小勾號來接受此答案。這樣其他用戶知道你不需要任何幫助。只有在答案解決了你的問題時才這樣做。 –

1

這不是真的了。我只是測試它。你現在可以在{...}之前訪問參數