我有一个has_one
和belongs_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_to
的optional
及其反向required
选项仅控制关联是否添加presence_of
验证。这真的与数据库驱动程序错误没有任何关系