2011-06-25 16 views
27

Rails 2.3.8バージョンをRails 3.0に移行していますので、ルートファイルを書き直しました。私がrake routesを使ってルートを列挙すると、いくつかのルート名に_indexが追加されています。なぜこのことが分かりませんか?Rails 3ルートはルート名に_indexを追加します

関連経路:

レール2.3.8:

map.namespace "tracker", :path_prefix => "" do |planner| 
    planner.resources :planner, :collection => {:step1 => :get, 
               :add => :get, 
               :unsubscribe => [:get, :post] } 
end 

レール3.0経路:

namespace "tracker", :path => "" do 
    resources :planner do 
    collection do 
     get :step1 
     get :add 
     get :unsubscribe 
     post :unsubscribe 
    end 
    end 
end 

出力rake routes

レールから2.3.8

step1_tracker_planner  GET /planner/step1(.:format) 
add_tracker_planner   GET /planner/add(.:format) 
unsubscribe_tracker_planner GET /planner/unsubscribe(.:format) 
          POST /planner/unsubscribe(.:format) 

Railsの3.0

step1_tracker_planner_index  GET /planner/step1(.:format) 
add_tracker_planner_index   GET /planner/add(.:format) 
unsubscribe_tracker_planner_index GET /planner/unsubscribe(.:format) 
            POST /planner/unsubscribe(.:format) 

この_indexが追加される理由の任意のアイデアをいただければ幸いです。

答えて

41

これは、リソースがの代わりに:plannerという名前で、Railsがその下にネストされたコレクションに_indexを追加することを決めたからです。私の推測では、読みやすくするためです。

通常、コレクションに指定されたアクションは動詞に変換されるため、この意味が理解できます。

resources :photos do 
    collection do 
    get 'search' 
    end 
end 

search_photos GET /photos/search(.:format) 

しかし、我々は最初のケースでは、リソースの写真の...

resources :photo do 
    collection do 
    get 'search' 
    end 
end 

search_photo_index GET /photo/search(.:format) 

と呼ばれる代わりにあれば、あなたは「写真」をサーチ:ルーティングドキュメントに与えられた代表的な写真のリソース例を見てみましょう2番目のケースでは、「写真インデックス」を検索します。セミヨンPerepelitsaの応答に続き

+2

この動作を変更する方法はありますか? – etc

+9

ルートファイルで "resources"の代わりに "resource"(単数)という単語を使用できます。 これは:indexルートを除いて、 "resources"要求と同様のルートを生成します。 Railsはあなたが単一のオブジェクトを扱っていると仮定しているので、アイテムのリストを持たないため、自動的にインデックスを生成しません。 詳細はこちら:http://guides.rubyonrails.org/routing.html#singular-resources – Jocko

9

resource :plannerresources :plannersのいずれかを使用する必要があります。特異なリソースとその違いについてはRails Guidesを参照してください。

+0

ありがとう! –

+0

あなたのモデルが単数形と複数形(例:シリーズ)で同じ場合はどうなりますか?たとえそれが望ましくないとしても、そこに_indexを追加するようです。 – MattMcKnight

0

は、resources :plannersPlannerControllerを期待するのに対しresource :plannerは、コントローラの名前がPlannersControllerで期待していることに注意してください。

リソースからリソースに変更するときにコントローラの名前を変更しない場合は、resource :planner, controller: :plannerを指定してデフォルトを上書きできます。

関連する問題