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

QueXuQ · 2014年06月11日 · 最后由 zhb963968 回复于 2015年05月06日 · 2639 次阅读

不设置数据库的 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 回调。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号