2010-04-11 7 views
5

Próbuję dodać niestandardową drogę do moich relaksującego trasy przy użyciu :collection param na map.resources tak:parametry przejścia do niestandardowych relaksującego trasy w Rails (przy użyciu: Collection)

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

Tagged akcja trwa w sposób : parametr tagu. Udostępniam link do adresu URL za pomocą: tagged_products_path(:tag => tag.name). Mój problem polega na tym, że adres URL, który to generuje:

/products/tagged?tag=electronic 

Chciałbym tag, aby być w adresie URL, a nie znak, tak jak poniżej:

/products/tagged/electronic 

Oczywiście można to osiągnąć przez osobną nazwaną trasę, ale zastanawiam się, czy czegoś brakuje i jest sposób na zrobienie tego z hasłem :collection.

Dzięki z góry za pomoc

-Damien

Odpowiedz

4

trasy Kolekcja nie obsługują to - będziesz musiał użyć nazwie trasy.

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

to właśnie zakłada, dzięki za wejście. – dwhite

1

Trasy zbierania nie obsługują tego, ale istnieje obejście.

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

Byłoby to pomocne, gdyby kontekst został dostarczony, np. "dodaj to do swojego kodu modelu" lub "to powinno iść w twoich routes.rb". – pjmorse

3

Ponieważ odpowiedź dotyczy Rails 2, chciałem tylko dodać wersję Rails 4 tego.

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

ten byłby stosowany jako

tagged_products_path('electronic') #=> "/products/tagged/electronic" 
Powiązane problemy