ブログ再開。
さて、先日Rails 2.2系のmasterに以下の変更がコミットされた。

http://github.com/rails/rails/commit/44a3009ff068bf080de6764a8c884fbf0ceb920e

そもそも今までのRailsの map.resourcesは、なんか routes.rbに1行書くだけで勝手にCRUD+αのroutesがうじゃうじゃ生成されて、邪魔くさいことこの上なかった。実際のアプリだと使われるURLの方が少ないぐらいなのに、rake routesの出力を無駄に汚されて不愉快きわまりない.

というのを、そういえばちょうど前回の Rails勉強会@東京#34 でも懸命に主張してみたりしたのだが、 REST信者 とかいう人たちには「気にするな」とか言われてまったく取り合ってもらえなくて悲しい思いをしたのだった。

しかしみんなにどんなにREST教の教えを説かれても僕にはRailsのこの挙動だけは納得いってなかったんだが、こうなってみるとどうやら僕の感覚の方が正しかったってことですかね。

ということで、以下実例。

  • リソースを作ってみたりする
% ./script/generate resource user

% ./script/generate resource group
  • rake routesを表示してみたところ。ごにゃごにゃしてて見づらすぎる
% rake routes
              groups GET    /groups                          {:controller=>"groups", :action=>"index"}
    formatted_groups GET    /groups.:format                  {:controller=>"groups", :action=>"index"}
                     POST   /groups                          {:controller=>"groups", :action=>"create"}
                     POST   /groups.:format                  {:controller=>"groups", :action=>"create"}
           new_group GET    /groups/new                      {:controller=>"groups", :action=>"new"}
 formatted_new_group GET    /groups/new.:format              {:controller=>"groups", :action=>"new"}
          edit_group GET    /groups/:id/edit                 {:controller=>"groups", :action=>"edit"}
formatted_edit_group GET    /groups/:id/edit.:format         {:controller=>"groups", :action=>"edit"}
               group GET    /groups/:id                      {:controller=>"groups", :action=>"show"}
     formatted_group GET    /groups/:id.:format              {:controller=>"groups", :action=>"show"}
                     PUT    /groups/:id                      {:controller=>"groups", :action=>"update"}
                     PUT    /groups/:id.:format              {:controller=>"groups", :action=>"update"}
                     DELETE /groups/:id                      {:controller=>"groups", :action=>"destroy"}
                     DELETE /groups/:id.:format              {:controller=>"groups", :action=>"destroy"}
               users GET    /users                           {:controller=>"users", :action=>"index"}
     formatted_users GET    /users.:format                   {:controller=>"users", :action=>"index"}
                     POST   /users                           {:controller=>"users", :action=>"create"}
                     POST   /users.:format                   {:controller=>"users", :action=>"create"}
            new_user GET    /users/new                       {:controller=>"users", :action=>"new"}
  formatted_new_user GET    /users/new.:format               {:controller=>"users", :action=>"new"}
           edit_user GET    /users/:id/edit                  {:controller=>"users", :action=>"edit"}
 formatted_edit_user GET    /users/:id/edit.:format          {:controller=>"users", :action=>"edit"}
                user GET    /users/:id                       {:controller=>"users", :action=>"show"}
      formatted_user GET    /users/:id.:format               {:controller=>"users", :action=>"show"}
                     PUT    /users/:id                       {:controller=>"users", :action=>"update"}
                     PUT    /users/:id.:format               {:controller=>"users", :action=>"update"}
                     DELETE /users/:id                       {:controller=>"users", :action=>"destroy"}
                     DELETE /users/:id.:format               {:controller=>"users", :action=>"destroy"}
  • そこで、routes.rbに以下の条件を追記
    % vi config/routes.rb
# 引数は配列でも
  map.resources :groups, :only => [:show, :index]
  # シンボル一つでも配列でもOK
  map.resources :users, :except => :destroy
  • routesがすっきりシンプルになった!
% rake routes
             groups GET  /groups                          {:controller=>"groups", :action=>"index"}
   formatted_groups GET  /groups.:format                  {:controller=>"groups", :action=>"index"}
              group GET  /groups/:id                      {:controller=>"groups", :action=>"show"}
    formatted_group GET  /groups/:id.:format              {:controller=>"groups", :action=>"show"}
              users GET  /users                           {:controller=>"users", :action=>"index"}
    formatted_users GET  /users.:format                   {:controller=>"users", :action=>"index"}
                    POST /users                           {:controller=>"users", :action=>"create"}
                    POST /users.:format                   {:controller=>"users", :action=>"create"}
           new_user GET  /users/new                       {:controller=>"users", :action=>"new"}
 formatted_new_user GET  /users/new.:format               {:controller=>"users", :action=>"new"}
          edit_user GET  /users/:id/edit                  {:controller=>"users", :action=>"edit"}
formatted_edit_user GET  /users/:id/edit.:format          {:controller=>"users", :action=>"edit"}
               user GET  /users/:id                       {:controller=>"users", :action=>"show"}
     formatted_user GET  /users/:id.:format               {:controller=>"users", :action=>"show"}
                    PUT  /users/:id                       {:controller=>"users", :action=>"update"}
                    PUT  /users/:id.:format               {:controller=>"users", :action=>"update"}

この機能は、ついさっきリリースされたRails 2.2から有効になっています。
明らかに良くなりましたね、こりゃ。これなら実案件でも使う気になってきた。

Sorry, comments are closed for this article.