9
resources :some_resource

つまり、ルートがあります/some_resource/:id

実際、:idforは常にセッションに格納されるため、パスを。でsome_resourceオーバーライドしたいと思います。または、それをオーバーライドして、インデックスアクションのパスGETを削除したいと思います。/some_resource/:id/some_resource/my/some_resource//some_resource/

これらの2つの目標を達成するにはどうすればよいですか?

4

2 に答える 2

14

あなたのroutes.rbに入れてください:

get "some_resource" => "some_resource#show"

行の

resources :some_resource

次に、レールはリソースを見つける前に「get」を取得します...したがって、get/some_resourceをオーバーライドします

さらに、以下を指定する必要があります。

resources :some_resource, :except => :index

前述のように、レールはそれを拾いませんが、それは良い習慣です

于 2012-09-02T14:28:14.153 に答える
12

チェンの答えはうまくいきます(そして私はしばらくの間そのアプローチを使用しました)が、標準化された方法があります。公式Railsガイドでは、収集ルートの使用が推奨されています。

収集ルートは、Railsがリソースを指定していると想定しないように存在します:id。私の意見では、これはファイル内の優先順位を使用してルートをオーバーライドするよりも優れていroutes.rbます。

resources :some_resource, :except => :index do
  get 'some_resource', :on => :collection, :action => 'show'
end

収集ルート以外を指定する必要がある場合は、ブロックを使用することをお勧めします。

resources :some_resource, :except => :index do
  collection do
    get 'some_resource', :action => 'show'
    # more actions...
  end
end
于 2013-08-15T21:10:05.640 に答える