no_picture

Rails 3.2.9 で default_scopeに設定してる条件が属性の初期値になるらしい

あるプロジェクトでrails 3.2.9 にアップデートしたら テストが失敗しまくる。そのひとつに ActiveRecordの default_scope を使ってる部分に問題があるとわかった。 どんなエラーかと言いますと。 NoMethodError: undefined method `to_i' for [1, 2, 3]:Array from activerecord-3.2.9/lib/active_record/connection_adapters/column.rb:178:in `value_to_integer' [1, 2, 3] とか即値すぎて わけがわからないよ という感じだったんですが、いろいろ調べると class User < ActiveRecord::Base default_scope proc { where(state_id: [1, 2, 3]]) } end というコードがあったときに User.new すると発生することがわかりました。 仕方ないので、 class User < ActiveRecord::Base scope :valid, proc { where(state_id: [1, 2, 3]]) } end として、ひたすら置換しまくりでした。 僕はdefault_scope使わない派なのであまり気にしない方向で。 ちなみに class User < ActiveRecord::Base default_scope proc { where(state_id: 1,name: "hoge") }