在sql中自动将null转换为false

时间:2011-11-22 06:15:14

标签: sql ruby-on-rails-3

我有一个名为ended的布尔列。最近我将其更改为不允许空值,因此确定它是否为假将更容易。

然而,我意识到很多地方都依赖于自动投掷为零。如果对象为null,它将自动转换为false。在此迁移之后,如果对象为null,则会发生错误。

例如:

params.merge!({
  ended: nokogiri_doc.at_css('.foo')
})

我不想手动添加.present?这些陈述中的每一个。如果有null:false列(不允许空值),是否可以保留自动转换?

1 个答案:

答案 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