Ruby on Rails 3

2010年8月30日

Ruby on Rails 3 の情報

Rails 3が、いよいよ正式版になったので、それについての情報を書いていこうかと思います。

  • 2.3系からの主な変更点
    • Ruby 1.9に正式対応
    • 今までscript/generateやscript/serverなどのコマンド類がrailsコマンドから呼び出す方式に変更
    • ずいぶんとrakeタスクが削られたというか、結構裏でタスクは生きてるようで、-Tで一覧に出なくなっただけ?
    • 新しいActive Record query engine
      users = User.where(:name => "david").limit(20)
      users = users.where("age > 29")
      
      # SELECT * FROM users
      # WHERE name = "david" AND age > 29
      # ORDER BY name
      # LIMIT 20
      users.order(:name).each { |user| puts user.name }

      という感じで、今までのHashを渡す形式から、検索の条件やらなにやらをnamed_scopeのように書く方式になった。

    • 新しいroutes
      resources :people do
        resource :avatar
      
        collection do
          get :winners, :losers
        end
      end
      
      # /sd34fgh/rooms
      scope ':token', :token => /\w{5,5}/ do
        resources :rooms
      end
      
      # /descriptions
      # /pl/descriptions
      # /en/descriptions
      scope '(:locale)', :locale => /en|pl/ do
        resources :descriptions
        root :to => 'projects#index'
      end

      2.3系と比べるとmap.がなくなり、すっきり書ける。

    • 新しいAction Mailer
    • 使用するライブラリ類をBundlerで管理
    • クロスサイトスクリプティング対応
      今までは<%= user.name %>なんてやるところには常に<%= hを付けなければいけなかったが、Rails 3では、逆に生データを出す場合に<%= raw user.name %>となる。
    • Active Model
      今まで、ActiveRecordではないデータをformで送信する場合、ActiveRecordのようなバリデーションが使えず、エラーチェックを組み込むのが一苦労だったが、ActiveModelで、その問題が解決されそうだ。
    • 速度向上
      今回のバージョンアップは、Merbとの統合という大きな改革の上で完成した物で、RailsというよりはMerbの進化形をRails 3にしたような内容となっている。Merbは軽量、速度重視で作られているため、今回のRails 3は大幅にパフォーマンスが向上しているらしい。
    • アプリの名前がクラス名になる
      ので、内部でクラス作る時に考慮する必要有り
    • 以降調査中

Posted by GENDOSU