2010-04-11 6 views
5

Tôi cố gắng để thêm một tuyến đường tùy chỉnh để các tuyến đường RESTful của tôi bằng cách sử dụng :collection param trên map.resources như vậy:thông số Passing để tùy chỉnh các tuyến đường RESTful trong Rails (sử dụng: bộ sưu tập)

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

Hành động gắn thẻ mất trong một : thông số thẻ. Tôi có thể liên kết đến đường dẫn URL bằng cách sử dụng: tagged_products_path(:tag => tag.name). Vấn đề của tôi với điều này là URL mà này tạo ra:

/products/tagged?tag=electronic 

Tôi muốn tag được trong URL và không thẻ, như vậy:

/products/tagged/electronic 

Tất nhiên điều này có thể được thực hiện bởi một con đường được đặt tên riêng biệt, nhưng tôi tự hỏi nếu tôi đang thiếu một cái gì đó và có một cách để làm điều này với băm :collection.

Cảm ơn trước sự giúp đỡ của bạn

-Damien

Trả lời

4

Collection tuyến không hỗ trợ này - bạn sẽ phải sử dụng một tuyến đường được đặt tên.

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

Đó là những gì tôi cho rằng, nhờ những đầu vào. – dwhite

1

Tuyến thu thập không hỗ trợ điều này nhưng có cách giải quyết khác.

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

Điều này sẽ hữu ích hơn nếu ngữ cảnh được cung cấp, ví dụ: "thêm mã này vào mã mô hình của bạn" hoặc "điều này sẽ đi trong routes.rb của bạn". – pjmorse

3

Vì câu trả lời dành cho Rails 2, tôi chỉ muốn thêm phiên bản Rails 4 này.

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

này sẽ được sử dụng như

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