将参数传递给Rails中的自定义RESTful路由(使用:集合)

时间:2010-04-11 02:17:56

标签: ruby-on-rails routing

我正在尝试使用: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

4 个答案:

答案 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