ユーザ用ツール

サイト用ツール


rails3:routing

文書の過去の版を表示しています。


rails3のURL設定

書き方がrails2から変わっているが、rails2の書き方も可能。config/routes.rbにURLの設定を書く。

現在のURL設定を見る

$ rake routes

リソース

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マッチング(rails2のconnect)、/auth/login へのアクセスを AuthControllerクラスのloginメソッドにディスパッチする。

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

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

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

scope "/admin" do
  resouces :models
end

namespaceはscopeに似ているが、モデルからテーブル名まで何から何まで名前空間が設定される。

namespace :admin do
  resouces :models
end

この場合、modelのテーブル名はadmin_modelsであることが期待されるし、モデルクラスはAdmin::Modelである必要がある。色々面倒なのでscaffoldで生成する以外では使わないだろう。以下のようにするとnamespace付きでscaffoldできる。

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

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

root :to => "controller#action"

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

rails3/routing.1302626486.txt.gz · 最終更新: 2011/04/12 16:41 by nullpon