Model.newの時に初期値を設定する その2

前の記事でinitializeメソッドのオーバーライドしていたけど、
Activerecordのdoc見るとafter_initializeというコードバックがあるみたいだったのでこっち使った方がよさそう。

直接あなたのアクティブレコードinitializeメソッドをオーバーライドする必要性を回避するために役立つことがあります。

だそうです。

class Item < ActiveRecord::Base
  def initialize(*args, &block)
    super
    self.start_on = DateTime.now.to_date        if self.start_on.nil?
    self.end_on = DateTime.now.to_date + 1.week if self.end_on.nil?
  end
end

↓↓↓↓↓↓↓

class Item < ActiveRecord::Base
  after_initialize :set_default_value_if_nil

  private
  def set_default_value_if_nil
    self.start_on = DateTime.now.to_date        if self.start_on.nil?
    self.end_on = DateTime.now.to_date + 1.week if self.end_on.nil?
  end
end

ぼーっと眺めると色々発見あっていい。
http://edgeguides.rubyonrails.org/active_record_callbacks.html