提问



通过Rails迁移删除数据库表列的语法是什么?

最佳参考


remove_column :table_name, :column_name


例如:


remove_column :users, :hobby


将从用户表中删除爱好列。

其它参考1


对于旧版本的Rails


ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype


对于Rails 3及以上版本


rails generate migration RemoveFieldNameFromTableName field_name:datatype

其它参考2


Rails 4已更新,因此可以在迁移中使用更改方法删除列,并且迁移将成功回滚。请阅读Rails 3应用程序的以下警告:


Rails 3警告


请注意,使用此命令时:


rails generate migration RemoveFieldNameFromTableName field_name:datatype


生成的迁移将如下所示:


  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end


从数据库表中删除列时,请确保不使用更改方法(Rails 3应用程序中迁移文件中不需要的示例):


  def change
    remove_column :table_name, :field_name
  end


在涉及remove_column时,Rails 3中的更改方法并不聪明,因此您将无法回滚此迁移。

其它参考3


在rails4应用程序中,也可以使用change方法删除列。第三个参数是data_type,在可选的第四个参数中你可以给出选项。它在文档中的可用转换部分中有点隐藏。[37]


class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end

其它参考4


有两种好方法可以做到这一点:


remove_column



你可以简单地使用remove_column,如下所示:


remove_column :users, :first_name


如果您只需要对架构进行一次更改,那么这很好。


change_table块



您也可以使用change_table块执行此操作,如下所示:


change_table :users do |t|
  t.remove :first_name
end


我更喜欢这个,因为我觉得它更清晰,你可以一次做几个改变。


这是支持的change_table方法的完整列表:


http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table[38]

其它参考5


在rails 5中,您可以在终端中使用此命令:


rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE


例如,从表用户中删除列access_level(字符串):


rails generate migration remove_access_level_from_users access_level:string


然后运行:


rake db:migrate

其它参考6


rails g migration RemoveXColumnFromY column_name:data_type


X =列名

Y =表名


修改


根据评论将RemoveXColumnToY更改为RemoveXColumnFromY - 为迁移实际执行的操作提供了更清晰的信息。

其它参考7


删除RAILS 5 App的列


rails g migration Remove<Anything>From<TableName> [columnName:type]


上面的命令在db/migrate目录中生成一个迁移文件。 Snippet blow是Rails生成器生成的表示例中的删除列之一,


class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end


我也为Rails做了一个快速参考指南,可以在这里找到。 [39]

其它参考8


remove_column :table_name, :column_name


(来自文档。)[40]

其它参考9


要从表中删除列,您必须在迁移后运行:


rails g migration remove_column_name_from_table_name column_name:data_type


然后运行命令:


rake db:migrate

其它参考10


给出以下命令,它将自己添加到迁移文件中


rails g migration RemoveColumnFromModel


运行上面的命令后,您可以检查迁移文件remove_column代码必须自己添加


然后迁移数据库


rake db:migrate

其它参考11


只需简单的3个步骤即可从表中删除列,如下所示:



  1. 编写此命令



rails g migration remove_column_from_table_name


在终端中运行此命令后,通过此名称和时间戳创建一个文件(remove_column from_table_name)。


然后转到此文件。



  1. 您必须编写的内部文件


    remove_column :table_name, :column_name

  2. 最后转到控制台然后再做


    rake db:migrate


其它参考12


change方法中的remove_column将帮助您从表中删除列。


class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end


请访问此链接以获取完整参考:http://guides.rubyonrails.org/active_record_migrations.html [41]

其它参考13


生成迁移以删除列,以便在迁移时(rake db:migrate),它应删除列。如果此迁移已回滚(rake db:rollback),它应该添加列


语法:


remove_column:table_name,:column_name



  删除列但无法在回滚时添加列。



例:


remove_column :users, :last_name


请注意复数表名:users


语法:


remove_column:table_name,:column_name,:type



  如果回滚迁移,则删除列,添加列



例:


remove_column :users, :last_name, :string


快乐的编码!

其它参考14


通过点击
remove_column :table_name, :column_name,点击
在迁移文件中


您可以通过键入以下命令直接在rails控制台中删除列:

ActiveRecord::Base.remove_column :table_name, :column_name