-
Rails2.0のインストール 2007-11-07 00:00:00
-
sexy migrationを試してみる 2007-11-07 00:00:00
sexy migrationを試してみました(すごい名前だ)。
migrationを以下のように書けます。create_table :users do |t| t.string :name, :email t.text :introduction t.integer :age end -
map.resourcesを試してみる 2007-11-07 00:00:00
Userモデルと、index(一覧表示)、show(ひとつの表示)、new,create(新規作成)、edit,update(更新)、destroy(削除)のアクションを持つコントローラがあったとすると、config/routes.rbに
map.resources :users
と書くだけでカッコいいURIを自動で作ってくれます。その確認はrake routesコマンドでOK。
users GET /users {:action=>"index", :controller=>"users"} formatted_users GET /users.:format {:action=>"index", :controller=>"users"} POST /users {:action=>"create", :controller=>"users"} POST /users.:format {:action=>"create", :controller=>"users"} new_user GET /users/new {:action=>"new", :controller=>"users"} formatted_new_user GET /users/new.:format {:action=>"new", :controller=>"users"} edit_user GET /users/:id/edit {:action=>"edit", :controller=>"users"} formatted_edit_user GET /users/:id/edit.:format {:action=>"edit", :controller=>"users"} user GET /users/:id {:action=>"show", :controller=>"users"} formatted_user GET /users/:id.:format {:action=>"show", :controller=>"users"} PUT /users/:id {:action=>"update", :controller=>"users"} PUT /users/:id.:format {:action=>"update", :controller=>"users"} DELETE /users/:id {:action=>"destroy", :controller=>"users"} DELETE /users/:id.:format {:action=>"destroy", :controller=>"users"}左から、名前、メソッド、URI、実際のアクション、になります。/usersに対してGETメソッドでアクセスすると一覧表示、同じURIに対してPOSTメソッドでデータを送ると、新しいモデルオブジェクトが作成されます。/users/:idに対してGETメソッドでひとつのデータの表示、PUTメソッドで更新、DELETEメソッドで削除されます。RESTfulでカッコいい。
さらにUserモデルに1対多でひもつくCarモデルがあった場合、config/routes.rbに
map.resources :users, :has_many => :cars
と書いてやることで、
.....省略...... user_cars GET /users/:user_id/cars {:action=>"index", :controller=>"cars"} formatted_user_cars GET /users/:user_id/cars.:format {:action=>"index", :controller=>"cars"} POST /users/:user_id/cars {:action=>"create", :controller=>"cars"} POST /users/:user_id/cars.:format {:action=>"create", :controller=>"cars"} new_user_car GET /users/:user_id/cars/new {:action=>"new", :controller=>"cars"} formatted_new_user_car GET /users/:user_id/cars/new.:format {:action=>"new", :controller=>"cars"} edit_user_car GET /users/:user_id/cars/:id/edit {:action=>"edit", :controller=>"cars"} formatted_edit_user_car GET /users/:user_id/cars/:id/edit.:format {:action=>"edit", :controller=>"cars"} user_car GET /users/:user_id/cars/:id {:action=>"show", :controller=>"cars"} formatted_user_car GET /users/:user_id/cars/:id.:format {:action=>"show", :controller=>"cars"} PUT /users/:user_id/cars/:id {:action=>"update", :controller=>"cars"} PUT /users/:user_id/cars/:id.:format {:action=>"update", :controller=>"cars"} DELETE /users/:user_id/cars/:id {:action=>"destroy", :controller=>"cars"} DELETE /users/:user_id/cars/:id.:format {:action=>"destroy", :controller=>"cars"}といったURIが作られます。
名前つきrouteは、モデルのインスタンスを指定してあげるだけ。
@user = User.find(1) user_url(@user) #=> http://localhost:3000/users/1 user_path(@user) #=> /users/1 @car = @user.find(2) user_car_path(@user, @car) #=> /users/1/cars/2
さらにすごいのは、link_toとかredirect_toとかform_for
@user = User.find(1) link_to(h(@user.name), @user) #=> link_to h(@user.name), :controller => "users", :action => "show", :id => 1 redirect_to(@user) #=> redirect_to "/users/1" form_for(@user) #=> action="/users/1" method="PUT" @user = User.new redirect_to(@user) #=> redirect_to "/users" form_for(@user) #=> action="/users" method="POST"
オブジェクトの状態を見て、空のときとそうでないときとで、URIが変化するのだ。これはすごい。
ちなみに、carsのようなhas_many状態のrouteでは、単純にオブジエクトを指定するのではなくて名前つきroutesを使用したほうがよさそう。

コメント(
リンク元(194)
