@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ActiveRecordインスタンスのInteger型カラムのデフォルト値のbefore_type_castは文字列

require "active_record"

ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Schema.define { create_table(:users) { _1.integer :age, default: 20 } }

class User < ActiveRecord::Base; end

u = User.new
p u.age, u.age_before_type_cast
~ ruby hoge.rb
-- create_table(:users)
   -> 0.0031s
20
"20"

なんとなくInteger型カラムのデフォルト値はInteger型だと思っていたんですよ。 正確には、ageの値はInteger型で、age_before_type_castの値は文字列型でした。

before_type_castなんだから、そらそうですね・・・。