Ruby on Rails: How do I add a not null constraint to an existing column using a migration?

前端 未结 4 1991
南方客
南方客 2021-01-31 07:04

In my Rails (3.2) app, I have a bunch of tables in my database but I forgot to add a few not null constraints. I\'ve googled around but I can\'t find how to write a migration wh

相关标签:
4条回答
  • 2021-01-31 07:07

    You can also use change_column_null:

    change_column_null :table_name, :column_name, false
    
    0 讨论(0)
  • 2021-01-31 07:21

    1) FIRST: Add column with default value

    2) THEN: Remove default value

    add_column :orders, :items, :integer, null: false, default: 0
    change_column :orders, :items, :integer, default: nil
    
    0 讨论(0)
  • 2021-01-31 07:29

    If you are using it on a new create migration script/schema here is how we can define it

    class CreateUsers < ActiveRecord::Migration[5.2]
      def change
        create_table :users do |t|
        t.string :name, null: false     # Notice here, NOT NULL definition
        t.string :email, null: false
        t.string :password, null: false
        t.integer :created_by
        t.integer :updated_by 
    
        t.datetime :created_at
        t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
       end
      end
    end
    
    0 讨论(0)
  • 2021-01-31 07:30

    For Rails 4+, nates' answer (using change_column_null) is better.

    Pre-Rails 4, try change_column.

    0 讨论(0)
提交回复
热议问题