如何使用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个步骤如下:
- 写这个命令
rails g migration remove_column_from_table_name
在由此名称和时间戳(remove_column from_table_name)创build的terminal1文件中运行此命令之后。
然后去这个文件。
-
里面的文件,你必须写
remove_column :table_name, :column_name
-
最后去控制台,然后做
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
将把列添加回来。