rails 6外键不能为空

时间:2019-05-28 17:48:48

标签: ruby-on-rails activerecord ruby-on-rails-6

我的迁移文件如下:

def change
    create_table :carts do |t|
      t.string :order_number
      t.decimal :total_price
      t.bigint :user_id, null: true
      t.string :status

      t.timestamps
    end
  end

我想允许user_id为空,但是我的架构文件将此迁移转换为:

t.bigint "user_id", null: false

所以在我的cart.rb模型中,即使我有

belongs_to :user, optional: true

它不起作用,当我尝试保存购物车对象时,我得到的ForeignKey不能为null错误!

如何允许外键为空值?

1 个答案:

答案 0 :(得分:1)

迁移不是当前db结构的声明,它们是合并后产生的更改。对于组合式结构导轨,请使用db/schema.rb(对于更复杂的方案,请使用schema.sql

如果该列为null: false,则必须在以后的迁移中对其进行更改(或者直接在db中进行更改,如果是这样-开发和生产之间的db结构可能不同步)。如果您想再次将其设置为null: true,请添加另一个可更改此设置的迁移。但是首先,我想出了为什么它最终会处于当前状态,也许是有原因的。

change_column :carts, :user_id, :bigint, null:true