[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へのバージョンアップは見送っています。