index
というリソースルートをRails 4アプリケーションに追加したいのですが、生成されたルートは期待通りにはなりません。しかし、別の名前(show_index
など)を使用している場合は、そうです。実証するために、私は何のルートを持っていないバニラのRailsアプリから始めましょう:`index`という名前のRailsリソースルートを作成する方法はありますか?
$ rake routes
You don't have any routes defined!
私はconfig/routes.rb
に以下を追加:以下機知Railsのルートを生成
resources :items
:
Prefix Verb URI Pattern Controller#Action
items GET /items(.:format) items#index
POST /items(.:format) items#create
new_item GET /items/new(.:format) items#new
edit_item GET /items/:id/edit(.:format) items#edit
item GET /items/:id(.:format) items#show
PATCH /items/:id(.:format) items#update
PUT /items/:id(.:format) items#update
DELETE /items/:id(.:format) items#destroy
アプリケーションにはshow
アクションがあり、パラメータハッシュにが含まれている場合、いわゆるindex
と表示されます。(こののインデックスは、コレクションののようなものではなく、アプリケーション固有のものです)。
私は、追加のパラメータを指定してshow
アクションを呼び出すためのカスタムindex
ルートを追加します。
resources :items do
get 'index' => 'items#show', with: 'index'
end
これは、新しいルートを生成するが、それは(上記のリストにedit_item
と比較)の代わりに期待id
のitem_id
を持っています::id
を取得する方法は、を使用することです
item_index GET /items/:item_id/index(.:format) items#show {:with=>"index"}
Routing documentation であるため、ルートは
get 'index' => 'items#show', with: 'index', on: :member
である必要がありますが、期待される結果が得られません。これは、予想されるルートが追加されますが、それは使用するのではなく、デフォルトshow
アクションからitem
メソッドの接頭辞を盗み、独自index_item
(再び、上記のリストでedit_item
と比較して):しかし
item GET /items/:id/index(.:format) items#show {:with=>"index"}
GET /items/:id(.:format) items#show
、私は以外のものを使用していましたindex
、このようshow_index
として、それが期待どおりに動作します:
get 'show_index' => 'items#show', with: 'index', on: :member
は
show_index_item GET /items/:id/show_index(.:format) items#show {:with=>"index"}
を生成します
したがって、ルートがindex
と呼ばれるときの動作に違いがあります。私は、暗黙のresources
ルートがその名前を使用しているためですが、私はそれらが衝突するような方法で使用するとは思わないからです。それはindex_item
(現存のitem_index
とは対照的に、既存のedit_item
に似ています)になる新しいindex
ルートを追加できるように見えます。
私が実証したように、別の名前を使用して問題を回避することができます。しかし、index
はshow_index
より読みやすい。
index
とリソースルートを指定することは可能ですか?:id
? `
で、 'get「はインデックス」=>「アイテム#ショー」してみてください:「インデックス」は、上:等の部材、「 –
をitem_index''レールの一つ」キーコンセプトは「設定より規約」です。あなたの計画は、7つのRailsデフォルトアクションの1つをルート名として使用することです。この決定では、規約を超えた設定を使用しています。これはRailsのアンチパターンです。それを動作させることは可能ですか?確かに、Railsアプリケーションでの作業の例として示したいコードではありません。 – Elvn
しかし、これは7つのレールのデフォルトアクションを変更しません。これは、7つのデフォルトアクションに適合する別のアクションを追加します。そのアクションの論理名は 'index'ですが、何らかの形でデフォルトアクションには影響しません。 – starfry