<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dominic (翼下之风)</title>
    <link>https://ruby-china.org/dominic</link>
    <description>年事已高，一事无成</description>
    <language>en-us</language>
    <item>
      <title>[提问] 对 Model 某 field 设定缺省值的 Best Practice</title>
      <description>&lt;p&gt;要对 Model 的某个 field，比如对 amount 设定缺省值，Ruby China wiki 上推荐写法是：
方法一：override getter setter
def amount
  self[:amount] or 0
end&lt;/p&gt;

&lt;p&gt;而 StackOverflows 里推荐的是：
方法二：利用 after_initialize :default_values &lt;/p&gt;

&lt;p&gt;class Trade &amp;lt; ActiveRecord::Base
    after_initialize :default_values
    private
    def default_values
        sell_type ||= "AVG"
    end
end&lt;/p&gt;

&lt;p&gt;方法二似乎不错。我现在的疑问是，如果用方法一，覆盖 getter 和 setter，getter 和 setter 在什么动作时会触发？对 Model 的创建、修改、删除、查询等过程中，有没有什么操作会绕开这两个 Setter 和 Getter，导致行为异常（没有写入缺省值、SQL 查询结果错误）？&lt;/p&gt;</description>
      <author>dominic</author>
      <pubDate>Sun, 01 Apr 2012 11:23:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/2322</link>
      <guid>https://ruby-china.org/topics/2322</guid>
    </item>
  </channel>
</rss>
