要对 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 查询结果错误)?