仍然得到NotNullViolation,尽管属于to:foo,可选:true



我有一个has_onebelongs_to关联,如下所示:

# teacher.rb
has_one: :student

# student.rb 
belongs_to :teacher, optional: true

但当我试图创造一个没有老师的学生。。。

a = Student.new()
a.save!
ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR:  null value in column "teacher_id" violates not-null constraint

这没有道理,因为我有optional: true。我已经尝试了无数次rake db:drop db:create db:migrate db:seed,但仍然出现相同的错误

感谢@dbugger和@Daniel Sindrestan,在另一个论坛的帮助下,我发现这就像进入现有的迁移文件并将null: false更改为null: true一样简单。然后重新制作数据库。或者,如果在现有应用程序上工作,则运行迁移以更改null:true。无论哪种方式,null: false都需要是null: true

此外,来自@max的评论:

belongs_tooptional及其反向required选项仅控制关联是否添加presence_of验证。这真的与数据库驱动程序错误没有任何关系

相关内容

最新更新