给定以下具有enum
列的ActiveRecord模型:
class User < ActiveRecord::Base
enum role: [:normal, :sales, :admin]
end
如何在保存到数据库之前将role
列的默认值设置为。
例如:
user = User.new
puts user.role # Should print 'normal'
答案 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