我有一个名为ended
的布尔列。最近我将其更改为不允许空值,因此确定它是否为假将更容易。
然而,我意识到很多地方都依赖于自动投掷为零。如果对象为null,它将自动转换为false。在此迁移之后,如果对象为null,则会发生错误。
例如:
params.merge!({
ended: nokogiri_doc.at_css('.foo')
})
我不想手动添加.present?这些陈述中的每一个。如果有null:false
列(不允许空值),是否可以保留自动转换?
答案 0 :(得分:1)
在数据库中,将列ended
的默认值更改为0.您可以在迁移中更改它,如下所示:
change_column 'table', 'ended', :boolean, :null => false, :default => 0
另一种方法是定义after_initialize回调以自动将列设置为false:
after_initialize :set_default_false
def set_default_false
self.ended = false if attribute_present?(:ended) and new_record? or ended.blank?
end