Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 doesn'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
like image 601
Patrick Klingemann Avatar asked May 26 '11 16:05

Patrick Klingemann


1 Answers

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

like image 61
rrivas Avatar answered Oct 11 '22 02:10

rrivas