5

que tienen la siguiente definición de la ruta:polymorphic_path de ruta colección personalizada

resources :documents do 
    collection do 
    post :filter 
    end 
end 

y la estructura siguiente modelo:

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

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

y estructura de los reguladores:

class DocumentsController < ApplicationController 
    def index 
    # not important 
    end 

    def filter 
    # not important 
    end 
end 

que puede fácilmente en un punto de vista decir:

polymorphic_path([@user, Document]) 

para obtener la ruta /usuarios/1/documentos, pero yo quiero ser capaz de decir:

filter_polymorphic_path([@user, Document]) 

para obtener la ruta /usuarios/1/documentos/filtro, por desgracia, esto no funciona

Alguien sabe cómo puedo conseguir esto sin agregar lo siguiente a mis rutas, para cada uno de mis modelos documentable:

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

Respuesta

13

polymorphic_path([@user, Document], :action => 'filter') le da /users/:user_id/documents/filter.

Además, polymorphic_path([@user, Document], :action => 'filter', :sort_order => 'this-order') le da /users/:user_id/documents/filter?sort_order=this-order.

Me encontré con el mismo problema pensando que puede reemplazar el edit en edit_polymorphic_path al método que desee.

Ver: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

3

Esto lo haría, y se lee muy bien.

polymorphic_path([:filter, @user, Document]) 

o estos

polymorphic_path([:filter, @user, :documents]) 
polymorphic_path([:filter, @user, Document.new]) 

Y con un parámetro de consulta

polymorphic_path([:filter, @user, Document], :q => 'keyword') 

Y, en una vista en la que también se puede hacer esto:

= link_to "Documents", [[:filter, @user, :documents], :q => 'keyword'] 
Cuestiones relacionadas