关于ruby on rails 3:在sql中自动将null转换为false

converting null to false in sql automatically

我有一个名为 ended 的布尔列。最近我把它改成了不允许空值,所以判断它是否为假会更容易。

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

例如:

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

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


在数据库中,将列 ended 的默认值更改为 0。您可以在迁移中更改它,如下所示:

1
change_column 'table', 'ended', :BOOLEAN, :NULL => FALSE, :DEFAULT => 0

另一种方法,定义一个 after_initialize 回调来自动将列设置为 false:

1
2
3
4
5
after_initialize :set_default_false

def set_default_false
  SELF.ended = FALSE IF attribute_present?(:ended) AND new_record? OR ended.blank?
END