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

时间:2016-03-03 21:52:31

标签: ruby-on-rails ruby

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

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

如何在保存到数据库之前将role的默认值设置为

例如:

user = User.new
puts user.role # Should print 'normal'

3 个答案:

答案 0 :(得分:4)

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

  after_initialize do
    if self.new_record?
      self.role ||= :normal
    end
  end
end

或者如果您愿意

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

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

答案 1 :(得分:2)

您可以将其设置为:默认为迁移文件中的“正常”。

一些不错的例子:LINK

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

  #before_save {self.role ||= 'normal'}
  # or
  #before_create {self.role = 'normal'}
end

答案 2 :(得分:1)

您可以使用此回调,before_save

class User < ActiveRecord::Base
     before_save :default_values

        def default_values
          self.role ||= "normal"
        end
end