rails2.1の新機能

Rails-2.1リリース - Hello, world! - s21gこちら見てたらrails2.1が出たとのこと。
以下の5つ新機能があるみたいです。

  1. タイムゾーン
  2. Dirty tracking
  3. Gemの依存関係
  4. Named scope
  5. UTCベースのmigration
  6. キャッシュの改善

http://weblog.rubyonrails.org/2008/6/1/rails-2-1-time-zones-dirty-caching-gem-dependencies-caching-etc

タイムゾーン

Railsタイムゾーンを指定出来るらしい。
以下、サイトから取得して来たサンプル

class ApplicationController < ActionController::Base

  before_filter :set_timezone

  def set_timezone
    # current_user.time_zone #=> 'London'
    Time.zone = current_user.time_zone
  end
end

各ユーザー毎のタイムゾーンを設定する。
結構ニーズありそうだけど自分ところじゃ使わないなあ。

Dirty traking

データが変更あったかどうか、changed?メソッドが付くらしい。
更に、そのカラムが変更されたかどうかもメソッド付くみたい。

@user = User.find(:first)
@user.changed? #=> false
@user.name_changed? #=> false

#書き換えする
@user.name = "test name"
@user.changed? #=> true
@user.name_changed? #=> true
@user.changed #=> ['title']

#保存する
@user.save 
@user.changed? #=> false
@user.name_changed? #=> false

ちょっと使うかも。

ジェムの依存関係

プロジェクトに利用するgemのリストを記述して、
rake gems:install
にてインストールさせれるらしい。


これは便利。
プロジェクトによってライブラリ入れたりする必要が有る事は多いし、
各メンバーにセットアップの手順説明する為に資料纏めてたけど、
enviroment.rbに書くだけで良いなんて。

Named scope

これも面白げ

class User < ActiveRecord::Base
  named_scope :active, :conditions => {:active => true}
end

User.active

で、active がtrueのユーザーだけを返す。
そして中でラムダを使うと

class User < ActiveRecord::Base
  named_scope :registered, lambda { |time_ago| { :conditions => ['created_at > ?', time_ago] }
end

User.registered 7.days.ago # same as User.find(:all, :conditions => ['created_at > ?', 7.days.ago])

サンプルを写しただけだけど、これは良いねえ。
使いがいがありそう。

UTCベースのmigration

これが一番嬉しい。
migrationの番号が連番ではなく、時間ベースになるようです。

script/generate migration one
create db/migrate/20080402122512_one.rb

複数人で作業してる時、それぞれ別のモデル作ってるのに競合してる事が多かったので助かりますね。

キャッシュ機能の改善

キャッシュ方法の指定が改善された様です。
削除しやすくなっているポイ。