初始化ActiveRecord模型

时间:2011-08-29 09:36:48

标签: ruby-on-rails activerecord

我正在用after_initialize回调初始化我的模型的一些属性,但是当从数据库加载记录时会调用此回调,覆盖保存的值。这是模型:

class Post < ActiveRecord::Base
  serialize :tags

  after_initialize :init_tags

  def init_tags
    write_attribute :tags, []
  end
end

在没有将回调更改为

的情况下,有没有办法做到这一点
  def init_tags
    if not read_attribute :tags
      write_attribute :tags, []
    end
  end

1 个答案:

答案 0 :(得分:0)

这样做:

class Post < ActiveRecord::Base
  serialize :tags

  after_initialize :init_tags

  def init_tags
    self.tags ||= []
  end
end

这相当于你的第二个解决方案,只是缩短了一点。 save方法未被调用,但它不应该是一个问题,因为这只会在模型的第一次初始化时使用,之后将填充该值。