2010-04-11 64 views
5

我想一個自定義路由使用:collection PARAM上map.resources添加到我的REST風格的路線,像這樣:參數傳遞到自定義REST風格的路線的Rails(使用:集合)

map.resources :products, :collection => { :tagged => :get } 

的標記動作發生在:標籤參數。我可以使用以下鏈接鏈接到URL路由: tagged_products_path(:tag => tag.name)。我對這個問題的是,這產生的網址:

/products/tagged?tag=electronic 

我想的標籤是在URL而不是標籤,就像這樣:

/products/tagged/electronic 

當然這是可以實現的由一個單獨的命名路線,但我想知道如果我失去了一些東西,並有一種方法來做到這一點與:collection散列。

在此先感謝您的幫助

-Damien

回答

4

路由集不支持這一點 - 你將不得不使用一個名爲路線。

map.tagged_products '/products/tagged/:tag', 
    :controller => 'products', :action => 'tagged', :conditions => { :method => :get } 
+0

這就是我假設一下,感謝投入。 – dwhite 2010-04-12 20:55:34

1

收集路線不支持這一點,但有一個解決方法。

"#{tagged_products_path}?#{{:tag => tag.name}.to_query}}" 
+2

如果提供了上下文,這將會更有幫助。 「將此添加到您的模型代碼」或「這應該在您的routes.rb中」。 – pjmorse 2012-10-01 17:31:33

3

由於答案是Rails 2,我只是想添加Rails 4版本。

get '/products/tagged/:tag' => 'products#tagged', as: :tagged_products 

這將用作

tagged_products_path('electronic') #=> "/products/tagged/electronic"