Ruby-on-rails-2.1-rails-routes

提供:Dev Guides
移動先:案内検索

Ruby on Rails 2.1-ルートシステム

RailsはURLを解析して、リクエストのコントローラー、アクション、およびパラメーターを決定します。 Railsルーティングでは、URLの一部で追加のパラメーターを指定でき、ルーティングプロセス全体を制御できます。 ルーティングルールは、どのWebサーバーでも同じように機能します。

config/routes.rbファイルはRailsルーティングシステムの中心にあります。 このファイルには、リクエストのURLパスを照合し、そのリクエストの送信先を決定しようとするルールが含まれています。 ルールは、ファイルで定義されている順序でテストされます。 リクエストのURLパスに一致する最初のルールにより、そのリクエストの運命が決まります。

ルーティングシステムは実際に2つのことを行います-

  • リクエストをコントローラ内のアクションメソッドにマッピングします。
  • link_to、redirect_to、form_tagなどのメソッドの引数として使用するURLを書き込みます。

したがって、ルーティングシステムは、訪問者のリクエストURLをコントローラー/アクションシーケンスに変換する方法を知っています。 また、仕様に基づいてURL文字列を製造する方法も知っています。

アプリケーションを生成するときにRailsによってインストールされる次のルートを考慮してください-

map.connect ':controller/:action/:id'

このルートは、要求が*:controller の後に:action が続き、その一部が:id *に送られることを想定していることを示しています。

「http://localhost:3000/book/edit/2」の着信リクエストを受け取った場合、次のようにマッピングされます-

params = {  :controller => 'book',
   :action     => 'edit',
   :id         => '2'
}

したがって、デフォルトのルーティングは(ルーティングルールを変更しない場合)です-

http://<base-url>/<controller>/<action>/<id>

[[1]] id パラメーターで BooksController クラス(コントローラー)の update メソッド(アクション)を呼び出します。

次のコードブロックは、他に指定がない場合、_book_をデフォルトのコントローラーとして設定します。 '/'にアクセスすると book コントローラーが呼び出されます。

ActionController::Routing:Routes.draw do |map|
   map.connect ':controller/:action/:id',:controller => 'book'
end

また、指定されたURLでアクションが指定されていない場合、デフォルトのアクションを定義できます-

ActionController::Routing:Routes.draw do |map|
   map.connect ':controller/:action/:id',
   :action => 'edit',:controller => 'book'
end

今、あなたは次のように20としてIDを持つブックを編集するためにブックコントローラ内のすべてのメソッドを編集することができます-

http://localhost:3000/2

ルートの優先度

ルートには、routes.rbファイル内のルートの出現順序によって定義される優先順位があります。 優先順位は上から下の順になります。

そのファイルの最後のルートが最も優先順位が低く、最後に適用されます。 一致するルートがない場合、404が返されます。

デフォルトルートの変更

要件に応じてデフォルトルートを変更できます。 次の例では、次のように_controller_と_action_を交換します-

# Install the default route as the lowest priority.
map.connect ':action/:controller/:id'

さて、与えられた_controller_から_action_を呼び出すには、次のようにURLを書く必要があります-

http://localhost:3000/action/controller/id

_action_と_controller_をこのような順序で配置することは特に論理的ではありません。 元のデフォルト(デフォルトのデフォルト)ルートの方が適しています。

事前デフォルトルート

「事前デフォルト」ルートは次のようになります-

map.connect ':controller/:action/:id.:format'

末尾の。:formatは、リテラルフィールドと、idフィールドの後のワイルドカード「format」値に一致します。 つまり、たとえば次のようなURLに一致します-

http://localhost:3000/book/show/3.xml

ここでは、コントローラーアクション内で、 params [:format] がxmlに設定されます。

空のルート

空のルートは、デフォルトルートの反対です。 新しく生成されたroutes.rbファイルでは、空のルートはコメントアウトされています。これは、普遍的または妥当なデフォルトがないためです。 作成するアプリケーションごとに、この_nothing_ URLが何をすべきかを決定する必要があります。

かなり一般的な空のルートルールの例を次に示します-

map.connect '', :controller => "main", :action => "welcome"
map.connect '', :controller => "main"

ここに上記のルールの説明があります-

  • 最初のものは、_http://localhost:3000._と入力しただけでも、メインコントローラー内でウェルカムアクションを検索します。
  • 最後の1つはhttp://localhost:3000/main/indexに接続します。 ここで、_index_は何も指定されていない場合のデフォルトのアクションです。

Rails 2.0では、rootという名前のマッパーメソッドが導入されています。これは、Railsアプリケーションの空のルートを定義する適切な方法になります。

map.root :controller => "homepage"

空のルートを定義することで、ユーザーがドメイン名以外の何も持たずにサイトに接続するときに見るものが得られます。

名前付きルート

アプリケーションの開発を続けると、おそらくアプリケーション全体で使用するいくつかのリンクがあります。 たとえば、多くの場合、メインのリストページに戻るリンクを配置します。 アプリケーション全体に次の行を追加する代わりに、そのリンクの簡略版にリンクできる名前付きルートを作成できます-

link_to 'Home', :controller => 'classified', :action => 'list'

次のように名前付きルートを定義できます。 ここでは、_connect_を使用する代わりに、定義可能な一意の名前を使用しています。 この場合、ルートは_home_と呼ばれます。 残りのルートは、作成した他のルートと似ています。

map.home '', :controller => 'classified', :action => 'list'

今、あなたは次のようにコントローラまたはビューでこれを使用することができます-

<%= link_to 'Back', home_url %>

ここでは、リンク先の_:controller_と_:action_をリストする代わりに、代わりに_urlを付けたルートの名前を入れています。 ユーザーは違いに気付かないはずです。 名前付きルーティングは、Rails開発者が入力を節約するのに便利なだけです。 上記の場合は、次のように名前付きルートなしで書くことができます-

<%= link_to 'Back', {:action => 'list'} %>

きれいなURL

ルートはきれいなURLを生成できます。 たとえば-

map.connect 'articles/:year/:month/:day',
   :controller => 'articles',
   :action     => 'find_by_date',
   :year       =>/\d{4}/,
   :month      =>/\d{1,2}/,
   :day        =>/\d{1,2}/

# Using the route above, the url below maps to:
# params = {:year => '2005', :month => '11', :day => '06'}
# http://localhost:3000/articles/2005/11/06
ルートの詳細を取得するには、* ActionController
Routing。*をご覧ください。