如何使用Rails迁移删除列

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

remove_column :table_name, :column_name 

例如:

 remove_column :users, :hobby 

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

对于旧版本的Rails

 ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype 

对于Rails 3和以上

 rails generate migration RemoveFieldNameFromTableName field_name:datatype 

Rails 4已经更新,所以在迁移中可以使用change方法来删除一个列,迁移将成功回滚。 请阅读Rails 3应用程序的以下警告:

导轨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 

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

  def change remove_column :table_name, :field_name end 

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

在rails4应用程序中,也可以使用change方法来移除列。 第三个参数是data_type,在可选的前提下你可以给出选项。 它在文档的 “可用转换”一节中有点隐藏。

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

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

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

在导轨5中,您可以在terminal中使用此命令:

 rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE 

例如删除表用户的列access_level(string):

 rails generate migration remove_access_level_from_users access_level:string 

然后运行:

 rake db:migrate 

移除RAILS 5 App的列

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

上面的命令在db/migrate目录下生成一个迁移文件。 Snippet打击是从Rails生成器生成的表格中删除列的一种,

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

我也为Rails做了一个快速参考指南,可以在这里find。

 remove_column :table_name, :column_name 

( 来自文档 )

为了从表格中删除列,只需简单的3个步骤如下:

  1. 写这个命令

rails g migration remove_column_from_table_name

在由此名称和时间戳(remove_column from_table_name)创build的terminal1文件中运行此命令之后。

然后去这个文件。

  1. 里面的文件,你必须写

    remove_column :table_name, :column_name

  2. 最后去控制台,然后做

    rake db:migrate

下面的命令会自动添加迁移文件

 rails g migration RemoveColumnFromModel 

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

然后迁移数据库

 rake db:migrate 

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

 rails g migration RemoveXColumnFromY column_name:data_type 

X =列名称
Y =表名

编辑

根据注释将RemoveXColumnFromY更改为RemoveXColumnFromY – 为迁移实际执行的内容提供了更多的清晰性。

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

您可以通过键入以下命令直接在导轨控制台中删除列:
ActiveRecord::Base.remove_column :table_name, :column_name

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

rails g迁移remove_column_name_from_table_name column_name:data_type

然后运行命令:

耙db:迁移

删除列,但不能回滚

remove_column:table_name,:column_name

例:

 remove_column :users, :last_name 

请注意, 用户不是用户

删除列也可以回滚

remove_column:table_name,:column_name,:type

例:

 remove_column :users, :last_name, :string 

现在,如果你运行rake db:migrate ,它将删除列和rake db:rollback将把列添加回来。