目次
Routing
Railsでは、URLとActionControllerの関連付けの設定を config/route.rb
に記述する。
現在のURL設定を見る
現在の設定されているURLを見る
$ rake routes
rails3
Rails2と比べて、より簡易な記述が可能になっている。
リソース
Rest指向のCRUD URLが作成される
resource :models
resource とresources
resourceは以下のアクションが作成される。ユーザから見て、このリソースに属するデータが単一である場合に使う。例えばシステム利用者が自分のユーザ情報を管理する場合、自分自身のユーザ情報以外は見える必要がないので、利用者から見ればユーザ情報は単一のリソースとみなせる。この場合はresourceを使う。
GET | show | /resource |
GET | new | /resource/new |
GET | edit | /resource/edit |
POST | create | /resource |
PUT | update | /resource |
DELETE | destroy | /resource |
resourcesは以下のアクションが作成される。ユーザから見て、このリソースに属するデータが複数がある場合に使う。例えば管理者が、利用者のユーザ情報全体を管理する必要がある場合、こちらを使う。
GET | index | /resources |
GET | new | /resources/new |
GET | edit | /resources/:id/edit |
GET | show | /resources/:id |
POST | create | /resources |
PUT | update | /resources/:id |
DELETE | destroy | /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'