我有以下路线定义:
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])
获取路径 / users / 1 / documents ,但我希望能够说:
filter_polymorphic_path([@user, Document])
获取路径 / users / 1 / documents / filter ,遗憾的是,这不起作用。
对于我的每个可记录模型,任何人都知道如何在不添加以下内容的情况下解决此问题:
resources :users do
resources :documents do
collection do
post :filter
end
end
end
答案 0 :(得分:14)
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
中的edit_polymorphic_path
替换为您想要的任何方法。
请参阅:http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
答案 1 :(得分: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']