ユーザ用ツール

サイト用ツール


rails:routing

Routing

Railsでは、URLとActionControllerの関連付けの設定を config/route.rb に記述する。

現在のURL設定を見る

現在の設定されているURLを見る

$ rake routes

rails3

Rails2と比べて、より簡易な記述が可能になっている。

リソース

Rest指向のCRUD URLが作成される

resource :models

resource とresources

resourceは以下のアクションが作成される。ユーザから見て、このリソースに属するデータが単一である場合に使う。例えばシステム利用者が自分のユーザ情報を管理する場合、自分自身のユーザ情報以外は見える必要がないので、利用者から見ればユーザ情報は単一のリソースとみなせる。この場合はresourceを使う。

GETshow/resource
GETnew/resource/new
GETedit/resource/edit
POSTcreate/resource
PUTupdate/resource
DELETEdestroy/resource

resourcesは以下のアクションが作成される。ユーザから見て、このリソースに属するデータが複数がある場合に使う。例えば管理者が、利用者のユーザ情報全体を管理する必要がある場合、こちらを使う。

GETindex/resources
GETnew/resources/new
GETedit/resources/:id/edit
GETshow/resources/:id
POSTcreate/resources
PUTupdate/resources/:id
DELETEdestroy/resources/:id

リソース操作メソッドを減らす

indexとshowだけにしたいなら

resource :models, :only => [:index, :show]

destroyを外すなら

resource :models, :except => [:destroy]

リソース操作メソッドを追加

例えば、モデルを検索する/models/search, 特定のモデルを有効化する /models/:id/activate というURLを追加するなら

resource :models do
  collection do
    get :search
  end
  member do
    put :activate
  end
end

search_models, activate_model というviewから呼び出せるルーティングメソッドが作成される。

リソースのネスト

resources :aaaModels do
  resources :bbbModels
end

URLとメソッドを変える

pathでURLを変える。asでREST URLを生成するメソッド名を変える

resources :hogefugas, :path => "moges", :as => "piyos"

とすると

    piyos GET    /moges
    piyos POST   /moges
 new_piyo GET    /moges/new
edit_piyo GET    /moges/:id/edit
     piyo GET    /moges/:id
          PUT    /moges/:id
          DELETE /moges/:id

というREST URLが作成される。

その他

match

URLマッチング(rails2のconnect)、/auth/login へのアクセスを AuthControllerクラスのloginメソッドにディスパッチする1)

match "/auth/login" => "auth#login",  :as => "login"

asオプションを指定すると、viewにlogin_urlとlogin_pathメソッドが作成される。

scope

管理ページを /admin 以下に作りたい場合などの書き方。Rails2まで使っていたpath_prefixオプションは廃止された

scope "/admin" do
  resouces :models
end

namespace

namespaceを使うとURLはscopeと同じように /namespace/controller のようになる。が、モデルからテーブル名まで何から何まで名前空間が設定される。

namespace :admin do
  resouces :models
end

この場合、modelのテーブル名はadmin_modelsであることが期待されるし、モデルクラスはAdmin::Modelである必要がある。viewは app/views/admin/index.html.erb となる。

以下のようにするとnamespace付きでscaffoldできる。

$ rails generate scaffold admin/model title:string enabled_from:date ...

root

アプリケーションのルート、コントローラ名とアクション名を以下のように指定する。public/index.htmlがあるとそちらが優先される

root :to => "controller#action"

viewでroot_url、root_pathというメソッドを呼ぶと、アプリケーションルートへのURLが作成される。

Rails2

書き方

config/route.rb の記述サンプル

ActionController::Routing::Routes.draw do |map|
 
# 設定はこのコードブロック書く
 
end
  # RAILS_ROOTへのアクセスを処理、root_controllerのindexメソッドが担当する
  map.root :controller => 'root', 
 
 
  # fooモデルに関するCRUD URLを作成する。この設定はscaffoldを作成すると自動的に追加される。
  map.resources :foos
 
 
  # fooモデルに関するCRUD URLに加えて、fooモデルとhas_manyな関係にあるbarモデルに対応するrestfulなURLを追加する。例えば、/foos/1/bars /new、/foos/1/bars/1 のようなURLができる。
  map.resources :foos,  :has_many => :bars
 
 
  # has_oneな関係なrestful URLを追加。 例:/foos/1/bar 
  map.resources :foos, :has_one => :bar
 
 
  # もっと深いhas_many、has_one ネスト
  # 例:GET /foos/:foo_id/bars/:bar_id/bazs/:id 
  # GET /foos/1/bars/2/buzs/5 でアクセスするとパラメータにfoo_id 1、bar_id 2、id 5が渡され、コントローラはbazs_controller 
 # 
  map.resources :foos, do |foo| 
    foo.resources :bar, has_many => bazs
  end
 
  # 自由に定義
  # /hoge/1/image のようなURLを定義して任意のコントローラとアクションメソッドと関連付ける。
  # コントローラには、このURLを生成するメソッド show_image_of_hoge_path() が追加される
  map.show_image_of_hoge 'hoges/:id/image', :contorller => 'hoges', :action => 'view_image'  
 
 
 # その他コントローラ全部 '/controller名/action名' というURLでアクセス 
  map.connect ':contoller/:action'
1)
RailsではRESTfulなURL設計が推奨されているのでログインURLを /auth/login としない方が良い。「ログイン=新規セッションの作成」と見なして /session/create のようにするのがRails流である
rails/routing.txt · 最終更新: 2011/11/03 11:30 by nullpon