自定义收集路由的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_path
的edit
替换为你想要的任何方法。
请参阅: 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']