Rails [提问] 对 Model 某 field 设定缺省值的 Best Practice

dominic · 2012年04月01日 · 最后由 dominic 回复于 2012年04月01日 · 2578 次阅读

要对 Model 的某个 field,比如对 amount 设定缺省值,Ruby China wiki 上推荐写法是: 方法一:override getter setter def amount self[:amount] or 0 end

而 StackOverflows 里推荐的是: 方法二:利用 after_initialize :default_values

class Trade < ActiveRecord::Base after_initialize :default_values private def default_values sell_type ||= "AVG" end end

方法二似乎不错。我现在的疑问是,如果用方法一,覆盖 getter 和 setter,getter 和 setter 在什么动作时会触发?对 Model 的创建、修改、删除、查询等过程中,有没有什么操作会绕开这两个 Setter 和 Getter,导致行为异常(没有写入缺省值、SQL 查询结果错误)?

amount 这类型的需求,可以直接用 database 的 default value

StackOverflows 上有讨论用 database 的 default value,结论是不怎么好,除了修改比较麻烦外,好像还有一个原因,我忘了。

#3 楼 @hooopo 连这种 gem 都有,我服了。

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