person.omgの中身がtrueなのは initialize メソッドがオーバーライドされて、Person.newが呼ばれたときに、インスタンス変数(@omg)にtrueが代入されているからです。
after_initialize ではありません。しかし、ActiveModelでもafter_initializeはできます。
例えばこんな感じ。
lang
1class Person
2  extend ActiveModel::Callbacks
3  define_model_callbacks :initialize, :only => :after
4  attr_accessor :id, :name, :omg
5
6  after_initialize :init_omg
7
8  def initialize(attributes={})
9    attributes.each do |key, value|
10      send("#{key}=", value)
11    end
12    
13    @omg ||= true
14    
15    run_callbacks :initialize do
16      self.omg = false
17    end
18  end
19  
20  def attritbutes
21    return @attributes if @attributes
22    @attributes = {
23      id: id,
24      name: name
25    }
26  end
27end
after_initialize というコールバックはインスタンスが生成されたときに発火するので、Person.newでもPerson.where(name: 'bob')でも、いろんなときにコールバックが走ります。なので、結構扱いに注意しないと危険なコールバックですね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/25 22:13
2015/05/26 07:07
2015/05/26 11:57
2015/05/26 12:50
2015/05/27 15:53