不设置数据库的 default 值,在 model 怎么设置方便?
假设我有字段pricedefault 是 0,我不想设置数据库的 default。不知道怎么在 model 设置方便?
price
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
有个 gem "default_value_for":https://github.com/FooBarWidget/default_value_for
根据官方文档
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 回调。