2012-03-22 68 views
1

我的表格填写了学生的详细信息,它将值添加到名为'学生'的表中。activerecord:数据库默认值不生效

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

柱结构

的ctime |没有时区的时间戳| ()

所以,当添加一个新学生时,我没有给表单中的ctime列赋值,但是它导致错误“PG :: Error:ERROR:列中的空值”ctime “违反非空约束”。

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

请帮助我。

在此先感谢。

回答

0

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

您可以在迁移列设置默认选项,或者您可以使用一个回调,before_save

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

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