我正在尝试使用:collection
上的map.resources
参数向我的RESTful路由添加自定义路由,如下所示:
map.resources :products, :collection => { :tagged => :get }
标记的操作采用:tag参数。我可以使用以下链接链接到URL路由:
tagged_products_path(:tag => tag.name)
。我的问题是它生成的URL:
/products/tagged?tag=electronic
我希望标记位于URL而不是标记中,如下所示:
/products/tagged/electronic
当然这可以通过一个单独的命名路由来完成,但是我想知道我是否遗漏了某些内容并且有一种方法可以使用:collection
哈希来实现这一点。
提前感谢您的帮助
-Damien
答案 0 :(得分:4)
收集路线不支持此功能 - 您必须使用命名路线。
map.tagged_products '/products/tagged/:tag',
:controller => 'products', :action => 'tagged', :conditions => { :method => :get }
答案 1 :(得分:3)
由于答案是针对Rails 2的,我只是想添加它的Rails 4版本。
get '/products/tagged/:tag' => 'products#tagged', as: :tagged_products
这将用作
tagged_products_path('electronic') #=> "/products/tagged/electronic"
答案 2 :(得分:1)
收集路由不支持此功能,但有一种解决方法。
"#{tagged_products_path}?#{{:tag => tag.name}.to_query}}"
答案 3 :(得分:0)
关于最新版本的Rails,其他答案不再准确。见Rails3 Routes - Passing parameter to a member route