我有一个 has_one 和 belongs_to 联想,就像这样:
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 无数次但仍然是同样的错误
optional: true
rake db:drop db:create db:migrate db:seed
多亏了@dbugger和@danielsindrestean,在另一个论坛的帮助下,我发现这就像进入现有的迁移文件并更改一样简单 null: false 到 null: true . 然后重新创建数据库。或者运行迁移以更改 null:true 如果正在使用现有的应用程序。不管怎样, 必须是
null: false
null: true
null:true