6

次のルート定義があります。

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
4

2 に答える 2

16

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

editinedit_polymorphic_pathを任意の方法に置き換えることができると考えて、同じ問題に遭遇しました。

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

于 2011-06-01T18:18:08.603 に答える
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']
于 2014-08-20T05:30:42.463 に答える