自定义收集路由的polymorphic_path

Pat*_*ann 6 routes ruby-on-rails polymorphic-associations custom-routes ruby-on-rails-3

我有以下路线定义:

resources :documents do
  collection do
    post :filter
  end
end
Run Code Online (Sandbox Code Playgroud)

以及以下模型结构:

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

class User < ActiveRecord::Base
  has_many :documents, :as => :documentable
end
Run Code Online (Sandbox Code Playgroud)

和控制器结构:

class DocumentsController < ApplicationController
  def index
    # not important
  end

  def filter
    # not important
  end
end
Run Code Online (Sandbox Code Playgroud)

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

polymorphic_path([@user, Document])
Run Code Online (Sandbox Code Playgroud)

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

filter_polymorphic_path([@user, Document])
Run Code Online (Sandbox Code Playgroud)

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

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

resources :users do
  resources :documents do
    collection do
      post :filter
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

rri*_*vas 15

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.

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

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