polymorphic_path for custom collection route
I have the following route definition:
resources :documents do
collection do
post :filter
end
end
and the following model structure:
class Document < ActiveRecord::Base
belongs_to :documentable, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :documents, :as => :documentable
end
and controller structure:
class DocumentsController < ApplicationController
def index
# not important
end
def filter
# not important
end
end
I can easily in a view say:
polymorphic_path([@user, Document])
to get the path /users/1/documents, but I want to be able to say:
filter_polymorphic_path([@user, Document])
to get the path /users/1/documents/filter, unfortunately, this doe开发者_运维百科sn't work.
Anyone know how I can pull this off without adding the following to my routes, for each of my documentable models:
resources :users do
resources :documents do
collection do
post :filter
end
end
end
polymorphic_path([@user, Document], :action => 'filter')
gives you /users/:user_id/documents/filter
.
Also, polymorphic_path([@user, Document], :action => 'filter', :sort_order => 'this-order')
gives you /users/:user_id/documents/filter?sort_order=this-order
.
I ran into the same problem thinking you can replace the edit
in edit_polymorphic_path
to whatever method you want.
See: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
This would do it, and it reads nicely.
polymorphic_path([:filter, @user, Document])
Or these
polymorphic_path([:filter, @user, :documents])
polymorphic_path([:filter, @user, Document.new])
And with a query param
polymorphic_path([:filter, @user, Document], :q => 'keyword')
And, in a view you can also do this:
= link_to "Documents", [[:filter, @user, :documents], :q => 'keyword']
精彩评论