Quick Tour of Routes.rb を読んだ

railsのルートが良く分からないからhttp://guides.rubyonrails.org/routing_outside_in.html
を読んだ


Quick Tour of Routes.rb
http://guides.rubyonrails.org/routing_outside_in.html

1. The Dual Purpose of Routing

 リクエストのときとレスポンスのときの双方向でつかうよ

2. Quick Tour of Routes.rb

ルートの種類は下記の5種類
 RESTful Routes
 Named Routes
 Nested Routes
 Regular Routes
 Default Routes

routes.rbの評価
 上に書いたものが優先される
 (上から評価して最初にマッチしたものが採用)
 マッチしなかったら404エラー


RESTful Routes
 RESTfulなルートを1発で定義。詳細は3. RESTful Routing: the Rails Defaultで
 こんな感じ

map.resources :books

Named Routes
 まあ見て分かるけど、map.loginの"login"とこがNamedってこと?
 こんな感じ

map.login '/login', :controller => 'sessions', :action => 'new

Nested Routes
 ネストしたルート。詳細は3.8. Nested Resourcesで

map.resources :assemblies do |assemblies|
  assemblies.resources :parts
end

Regular Routes
 RESTfulじゃないルート。普通これ。分かりやすい

map.connect 'parts/:number', :controller => 'inventory', :action => 'show'

Default Routes
 自動的に最後に書かれるルート。普通のRESTfulじゃないやつはだいたいここでマッチする
 全部RESTfulでやるなら消してもOK

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

3. RESTful Routing: the Rails Default

 RailsのデフォはRESTfulなルーティングだから
 新しいアプリはRESTful Routingにしとけ

3.2. CRUD, Verbs, and Actions

RESTfulなルートはHTTPのメソッドに対応してる。
たとえば、

map.resources :photos

って書くと、
 

HTTPのメソッド URL 呼ばれるcontroller 呼ばれるaction 用途
GET /photos Photos index photoの一覧表示
GET /photos/new Photos new photo作成画面表示
POST /photos Photos create 新規photo作成処理
GET /photos/1 Photos show 指定のphoto表示
GET /photos/1/edit Photos edit photo編集画面表示
PUT /photos/1 Photos update 指定のphoto更新処理
DELETE /photos/1 Photos destroy 指定のphoto削除処理

ができる。

3.3. URLs and Paths

 RESTfulなルートを定義すると下記のurlとpathが使えるようになる

photos_url と photos_path は index と create アクション(HTTPのメソッドで違う)
new_photo_url と new_photo_path は new アクション
edit_photo_url と edit_photo_path は edit アクション
photo_url と photo_path は show, update, and destroy アクション(HTTPのメソッドで違う)

_urlがついてるのはフルパス。_pathは相対パス
こんな感じ

photos_url  # => "http://www.example.com/photos"
photos_path # => "/photos"

3.4. Defining Multiple Resources at the Same Time

書くのがめんどかったら1行でかける

map.resources :photos, :books, :videos
map.resources:

だと全部???わからん

3.5. Singular Resources

(シングルトンあんまりつかわなそうだから適当に省略
てかシングルトンのモデルが作れるのをはじめて知った)

シングルトンのリソースにRESTfulなルートを定義するときは
こんな感じ。map.resourceが単数形ね。

map.resource :geocoder

マップされるパスはmap.resourcesで定義されるののIDがない版になる。
コントローラーは複数形のまま。

生成されるurlとpathは
new_geocoder_url 、 new_geocoder_path
edit_geocoder_url 、 edit_geocoder_path
geocoder_url 、 geocoder_path

3.6. Customizing Resources

RESTfulなルートはいろいろカスタマイズできるよ

3.6.1. Using :controller

:controllerを使うと、別のコントローラーをつかえる
こんな感じ

map.resources :photos, :controller => "images"

マップされるパスは呼び出されるコントローラーが違うだけ。
でも、生成されるurlとpathはphotos_path, new_photo_pathとかで、
images_path, new_image_pathじゃないよ

3.7. Controller Namespaces and Routing

めんどいから省略。いろいろできる。

3.7.8. Using :only and :except

only と
except オプションで、HTTPメソッドを限定できる
map.resources :photos, :only => [:index, :show]
index, showアクションだけに限定する
map.resources :photos, :except => :destroy

destroyだけOKにする

3.8. Nested Resources

たとえば親子関係にあるこんな感じのモデルで、

class Magazine < ActiveRecord::Base
  has_many :ads
end

class Ad < ActiveRecord::Base
  belongs_to :magazine
end

こんな感じでルート定義すると

map.resources :magazines do |magazine|
  magazine.resources :ads
end

こんな感じで子のモデルを操作するためのルートが定義される。
用途は見て分かるから省略。

HTTPのメソッド URL 呼ばれるcontroller 呼ばれるaction
GET /magazines/1/ads Ads index
GET /magazines/1/ads/new Ads new
POST /magazines/1/ads Ads create
GET /magazines/1/ads/1 Ads show
GET /magazines/1/ads/1/edit Ads edit
PUT /magazines/1/ads/1 Ads update
DELETE /magazines/1/ads/1 Ads destroy

生成されるurlとpathは
magazine_ads_url とか edit_magazine_ad_pathとかな感じで


あといろいろ省略

4. Regular Routes

簡単だからいろいろ省略

4.6. Named Routes

こんな感じで名前付きのルートが作れる。

map.logout '/logout', :controller => 'sessions', :action => 'destroy'

これだと、logout_path と logout_urlが使える。


4.7. Route Requirements

:requirementsオプションでルートのパラメータの形式を指定できる
こんな感じ

map.connect 'photo/:id', :controller => 'photos', :action => 'show',
 :requirements => { :id => /[A-Z]\d{5}/ }

もっと短くこんな感じにも書ける

map.connect 'photo/:id', :controller => 'photos', :action => 'show',
  :id => /[A-Z]\d{5}/

4.9. Route Globbing

ルートにGlobが使える。
複数のパラメータを指定するときに使う用
こんな感じにすると

map.connect 'photo/*other', :controller => 'photos', :action => 'unknown',

photo/よりあとの部分が分解されて
params[:other]に配列でパラメータが入るみたい

photo/12
だとparams[:other]=[12] かな??

/photo/long/path/to/12
だとparams[:other]=['long','path','to',12]
見たいな感じになる???(やってみないとわからん)

いろいろ省略

7.1. Using map.root

rootのパスをマップする

map.root :controller => "pages", :action => "main"

8.1. Seeing Existing Routes with rake

rake routes

で定義されたルートを見れるよ


あと省略