2011-04-13 35 views
2

我需要確定當前正在處理的應用程序的當前路徑中的路由段密鑰的數量,儘管在相關的Rails 3源文件中進行了一些挖掘,但我無法弄清楚。如何從Rails 3路線獲取細分鍵?

我知道如何使用url_forrequest從當前路徑建立一個路徑,但我不知道如何真正得到映射到url_for使用路由ActionController::Routing::Route。如果我能得到我需要的路線的一個實例,我可以調用Route#segment_keys並獲得我需要的。

如果有人感興趣,我這樣做的原因是我可以在選擇下拉菜單之間切換資源,並保持適用於當前選定資源的當前視圖,但只有在當前路徑不可用時纔會執行,噸包含嵌套路徑(即切換到/resources/1/edit/resources/2/edit之間/resources/1/subresources/1切換到/resources/2/subresources/1因爲subresource數1不是resource 2孩子)。

+0

你的模型結構是什麼? http://guides.rubyonrails.org/解釋了這一切。 – jvatic 2011-04-16 01:44:01

+0

@jvatic模型與獲取給定路線的路段數量有什麼關係?這是指南中的哪個地方?我很樂意在那裏讀到它,但它甚至沒有在API文檔中討論過... – coreyward 2011-04-16 02:11:43

+0

閱讀http://guides.rubyonrails.org/routing.html,你可以很容易地使用jQuery來切換,除非你的在JavaScript上回復不舒服可能是更好的解決方案之一,另一種選擇是使用嵌套路由並將參數傳遞給兩個模型控制器中的前過濾器。 – jvatic 2011-04-16 02:18:18

回答

0

我,我需要做這樣的事情的情況下,所以我在application_helper.rb增加了一個方法:

def display_sub_navigation 
    if admin_signed_in? 
    url_path = request.fullpath.split("/") 
    if url_path.size > 3 && File.exists?(Rails.root.join("app/views/shared/_#{url_path[2]}_sub_navigation.html.erb")) 
     render :partial => "/shared/#{url_path[2]}_sub_navigation" 
    end 
    end 
end 

正如你可以看到使用request.fullpath.split(「/」 )創建一個我分配給url_path的數組。從這裏,我可以提取出我想要的或計算數組中元素的數量。我希望這會把你推向正確的方向。

0

你需要所有的段密鑰或只是某種?

我能夠使用此代碼

Rails.application.routes.routes.collect do |i| 
    i.path.spec.grep(Journey::Nodes::Literal).collect(&:left) 
end 

這讓我纔剛文字段的陣列得到公正字面鑰匙 - 我敢打賭,你可以修改計算存在分段密鑰的數量(或做一次的文字,一次針對符號)Journey::Nodes::Cat支持to_s這將給你用來構建航線和to_regexp這將給你可以對request.path

0

會像這樣幫助運行正則表達式的原始字符串?它解析了路由哈希的路徑。

> uri = URI("http://localhost:3000/items/2015/3") # some URI for your request, or the URL/Path in question 
> Rails.application.routes.recognize_path(uri.path) 
=> {:controller=>"items", :action=>"index", :year=>"2015", :month=>"03"}