Rails: Adding an index after adding column

前端 未结 6 783
死守一世寂寞
死守一世寂寞 2020-12-22 22:18

Suppose I created a table table in a Rails app. Some time later, I add a column running:

rails generate migration AddUser_idColumnToTable user_i         


        
6条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-22 22:56

    If you need to create a user_id then it would be a reasonable assumption that you are referencing a user table. In which case the migration shall be:

    rails generate migration AddUserRefToProducts user:references
    

    This command will generate the following migration:

    class AddUserRefToProducts < ActiveRecord::Migration
      def change
        add_reference :user, :product, index: true
      end
    end
    

    After running rake db:migrate both a user_id column and an index will be added to the products table.

    In case you just need to add an index to an existing column, e.g. name of a user table, the following technique may be helpful:

    rails generate migration AddIndexToUsers name:string:index will generate the following migration:

    class AddIndexToUsers < ActiveRecord::Migration
      def change
        add_column :users, :name, :string
        add_index :users, :name
      end
    end
    

    Delete add_column line and run the migration.

    In the case described you could have issued rails generate migration AddIndexIdToTable index_id:integer:index command and then delete add_column line from the generated migration. But I'd rather recommended to undo the initial migration and add reference instead:

    rails generate migration RemoveUserIdFromProducts user_id:integer
    rails generate migration AddUserRefToProducts user:references
    

提交回复
热议问题