新手问题 不设置数据库的 default 值,在 model 怎么设置方便?

QueXuQ · June 11, 2014 · Last by zhb963968 replied at May 06, 2015 · 2644 hits

不设置数据库的 default 值,在 model 怎么设置方便?

假设我有字段pricedefault 是 0,我不想设置数据库的 default。不知道怎么在 model 设置方便?

before_save :set_price

def set_price
  self.price ||= 0
end
def price
  self[:price] ||= 0
end

https://github.com/bsm/attribute-defaults

想起以前和 php 共用表的那段历史了....

after_initialize :set_default_values

private

def set_default_values
  price ||= 0
end

#3 楼 @saiga :plus1:

粗糙点的做法。

after_initialize :set_defaults
private
def set_defaults
  {price: 0}.each {|k,v| self[k] ||= v}
end

根据官方文档

he after_initialize callback will be called whenever an Active Record object is instantiated, either by directly using new or when a record is loaded from the database. 

所以你使用 after_initialize, 之后从数据库里面加载数据,每次都会调用一下 set_defaults 方法。 所以个人觉得,设置初始值应该使用 before_create 回调。

You need to Sign in before reply, if you don't have an account, please Sign up first.