如何在after_initialize中初始化Active Record属性?

时间:2014-12-20 21:51:34

标签: ruby-on-rails ruby

user.rb

after_initialize :init

private

    def init
        self.name ||= 'Bob'
    end

IRB

irb> User.select('id')
(Object doesn't support #inspect)

如果我将回调更改为before_validation,则上述查询有效。

理想情况下,我希望能够在after_initialize中保持初始化。有没有办法实现这个目标?

我不希望override the initialize method

1 个答案:

答案 0 :(得分:-1)

发布的代码试图在每次用户实例化时设置名称​​(例如User.new,User.first,User.all)

如果您打算在name = "Bob"为零时使用name保存记录,请在before_validationafter_validation中执行此操作。

如果您打算在name为零时返回“Bob”,请在getter中执行此操作:

  def name
    @name ||= "Bob"
  end