Rails 3.2.9 では integer なカラムに紐付いた属性に Numeric・Boolean 以外の内容を入れたときの挙動が変わった
http://blog.eiel.info/blog/2012/11/16/rails-329-default-scope/ 読んで,「前からそうじゃなかったっけ?」と思ったので確認した.
そもそも default_scope の挙動が変わったのではなく,代入時のキャストの挙動が変わったようだ.(ここでは default_scope に配列を配置することの是非は置いておく)
rails g model item price:integer
という例では,以下のような状態になる
1.9.3-p286 :022 > Rails.version => "3.2.8" 1.9.3-p286 :023 > item.price = [100,200,300] => [100, 200, 300] 1.9.3-p286 :024 > item.price => 1
1.9.3-p286 :020 > Rails.version => "3.2.9" 1.9.3-p286 :021 > item.price = [100,200,300] NoMethodError: undefined method `to_i' for [100, 200, 300]:Array
https://github.com/rails/rails/pull/7582 による修正で要するに「integer のカラムに配列とか数字じゃないもの入れたら普通は例外になる」という仕様.まあそりゃそうだよな.