5

我有以下路由定義:polymorphic_path定製收集路線

resources :documents do 
    collection do 
    post :filter 
    end 
end 

和下面的模型結構:

class Document < ActiveRecord::Base 
    belongs_to :documentable, :polymorphic => true 
end 

class User < ActiveRecord::Base 
    has_many :documents, :as => :documentable 
end 

和控制器的結構:

class DocumentsController < ApplicationController 
    def index 
    # not important 
    end 

    def filter 
    # not important 
    end 
end 

我可以很容易地在一種說法:

polymorphic_path([@user, Document]) 

獲得路徑/用戶/ 1 /文件,但我希望能夠說:

filter_polymorphic_path([@user, Document]) 

獲得路徑/用戶/ 1 /文件/過濾器,不幸的是,這不起作用。

任何人都知道我可以把這事辦成,而不添加以下到我的路線,我的每型號:

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

回答

13

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

3

這將做到這一點,它很好地讀取。

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']