activerecord:数据库默认值未生效

时间:2012-03-22 08:05:51

标签: ruby-on-rails

我有填写学生详细信息的表单,该表格会将值添加到名为“student”的表中。

在该表中,我有一个名为'ctime'的列,它具有数据库默认值。

列结构

ctime |没有时区的时间戳| not null default now()

因此,在添加新学生时,我没有给表单中的ctime列赋值,但是它导致错误“PG ::错误:错误:列中的空值”ctime“违反了非空约束”。

我的问题是,即使它在数据库中有默认值,为什么会出现错误?

请帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果已在表模式中定义了具有某个静态默认值的列,则AR实例中的相应属性将在创建实例后自动具有此值。检查您是否正确分配默认值。

您可以在迁移中为列设置默认选项,也可以使用回调before_save

class Model < ActiveRecord::Base
  before_save :default_values
  def default_values
    self.status ||= 'value'
  end
end

或者您甚至可以使用after_initialize方法设置默认值。