自定义收集路由的polymorphic_path

我有以下路线定义:

resources :documents do collection do post :filter end end 

以及以下模型结构:

 class Document  true end class User  :documentable end 

和控制器结构:

 class DocumentsController < ApplicationController def index # not important end def filter # not important end end 

我可以轻松地在一个视图中说:

 polymorphic_path([@user, Document]) 

获取路径/ users / 1 / documents ,但我希望能够说:

 filter_polymorphic_path([@user, Document]) 

不幸的是,获取路径/ users / 1 / documents / filter ,这不起作用。

对于我的每个可记录模型,任何人都知道如何在不添加以下内容的情况下将其删除:

 resources :users do resources :documents do collection do post :filter end end end 

polymorphic_path([@user, Document], :action => 'filter')为您提供/users/:user_id/documents/filter

此外, polymorphic_path([@user, Document], :action => 'filter', :sort_order => 'this-order')为您提供/users/:user_id/documents/filter?sort_order=this-order

我遇到了同样的问题,认为你可以将edit_polymorphic_pathedit替换为你想要的任何方法。

请参阅: http : //api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

这样做可以做到,并且读得很好。

 polymorphic_path([:filter, @user, Document]) 

或者这些

 polymorphic_path([:filter, @user, :documents]) polymorphic_path([:filter, @user, Document.new]) 

并带有查询参数

 polymorphic_path([:filter, @user, Document], :q => 'keyword') 

而且,在视图中,您也可以这样做:

 = link_to "Documents", [[:filter, @user, :documents], :q => 'keyword']