Add a default value to a column through a migration

后端 未结 7 1631
旧巷少年郎
旧巷少年郎 2020-11-28 02:16

How do I add a default value to a column that already exists through a migration?

All the documentation I can find shows you how to do it if the column doesn\'t alr

相关标签:
7条回答
  • 2020-11-28 02:23

    Execute:

    rails generate migration add_column_to_table column:boolean
    

    It will generate this migration:

    class AddColumnToTable < ActiveRecord::Migration
      def change
        add_column :table, :column, :boolean
      end
    end
    

    Set the default value adding :default => 1

    add_column :table, :column, :boolean, :default => 1

    Run:

    rake db:migrate

    0 讨论(0)
  • 2020-11-28 02:23

    This is what you can do:

    class Profile < ActiveRecord::Base
      before_save :set_default_val
    
      def set_default_val
        self.send_updates = 'val' unless self.send_updates
      end
    end
    

    EDIT: ...but apparently this is a Rookie mistake!

    0 讨论(0)
  • 2020-11-28 02:24

    **Rails 4.X +**

    As of Rails 4 you can't generate a migration to add a column to a table with a default value, The following steps add a new column to an existing table with default value true or false.

    1. Run the migration from command line to add the new column

    $ rails generate migration add_columnname_to_tablename columnname:boolean
    

    The above command will add a new column in your table.

    2. Set the new column value to TRUE/FALSE by editing the new migration file created.

    class AddColumnnameToTablename < ActiveRecord::Migration
      def change
        add_column :table_name, :column_name, :boolean, default: false
      end
    end
    

    **3. To make the changes into your application database table, run the following command in terminal**

    $ rake db:migrate
    
    0 讨论(0)
  • 2020-11-28 02:25
    change_column_default :employees, :foreign, false
    
    0 讨论(0)
  • 2020-11-28 02:27

    For Rails 4+, use change_column_default

    def change
      change_column_default :table, :column, value
    end
    
    0 讨论(0)
  • 2020-11-28 02:30

    Using def change means you should write migrations that are reversible. And change_column is not reversible. You can go up but you cannot go down, since change_column is irreversible.

    Instead, though it may be a couple extra lines, you should use def up and def down

    So if you have a column with no default value, then you should do this to add a default value.

    def up
      change_column :users, :admin, :boolean, default: false
    end
    
    def down
      change_column :users, :admin, :boolean, default: nil
    end
    

    Or if you want to change the default value for an existing column.

    def up
      change_column :users, :admin, :boolean, default: false
    end
    
    def down
      change_column :users, :admin, :boolean, default: true
    end
    
    0 讨论(0)
提交回复
热议问题