如何为活动记录枚举指定默认值?

Jus*_*ner 2 ruby ruby-on-rails

给定以下带有enum列的ActiveRecord模型:

class User < ActiveRecord::Base
  enum role: [:normal, :sales, :admin]
end
Run Code Online (Sandbox Code Playgroud)

保存到数据库之前,如何设置role列的默认值。

例如:

user = User.new
puts user.role # Should print 'normal'
Run Code Online (Sandbox Code Playgroud)

Sha*_*nce 5

class User < ActiveRecord::Base
  enum role: [:normal, :sales, :admin]

  after_initialize do
    if self.new_record?
      self.role ||= :normal
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意

class User < ActiveRecord::Base
  enum role: [:normal, :sales, :admin]

  after_initialize :set_defaults

  private

  def set_defaults
    if self.new_record?
      self.role ||= :normal
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,我们使用|| =来防止after_initialize破坏使用User.new(some_params)初始化期间传入的任何内容