[rails] 続・Rails2.1.1は危ない

先日の日記(メモ)の解説
http://d.hatena.ne.jp/mat_aki/20080916/1221562551

2.1.1では、has_oneの関連で同時に保存した際に、関連テーブルのバリデーションの結果が親のインスタンスに保存されないようです。

まず、2.1.0で実行する。
userの関連テーブルのprofileにはemailに非空制約がついているので、emailが空でuserを保存した際に同時に検査が走って、
errorsに"profile"=>["is invalid"]が入る。
これが正常な動きだと思う。

/home/aki/dev/tmp/2_1_0% ./script/console -s            
Loading development environment in sandbox (Rails 2.1.0)
Any modifications you make will be rolled back on exit
>> u = User.new
=> #<User id: nil, name: nil, created_at: nil, updated_at: nil>
>> u.profile = Profile.new
=> #<Profile id: nil, email: nil, introduction: nil, user_id: nil, created_at: nil, updated_at: nil>
>> u.valid?
=> false
>> u.errors
=> #<ActiveRecord::Errors:0xb6d0f848 @errors={"name"=>["can't be blank"], "profile"=>["is invalid"]}, @base=#<User id: nil, name: nil, created_at: nil, updated_at: nil>>

しかし、同様に2.1.1で実行する。
errorsに何も入っていない。。。

/home/aki/dev/tmp/2_1_0% ./script/console -s
Loading development environment in sandbox (Rails 2.1.1)
Any modifications you make will be rolled back on exit
>> u = User.new
=> #<User id: nil, name: nil, created_at: nil, updated_at: nil>
>> u.profile = Profile.new
=> #<Profile id: nil, email: nil, introduction: nil, user_id: nil, created_at: nil, updated_at: nil>
>> u.valid?
=> false
>> u.errors
=> #<ActiveRecord::Errors:0xb72024e0 @errors={"name"=>["can't be blank"]}, @base=#<User id: nil, name: nil, created_at: nil, updated_at: nil>>
>> exit

どないなってんねん!!!
ということで、2.1.1へのバージョンアップは見送っています。