通过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已更新,因此可以在迁移中使用更改方法删除列,并且迁移将成功回滚 . 请阅读Rails 3应用程序的以下警告:
Rails 3 Warning
请注意,使用此命令时:
生成的迁移将如下所示:
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
在涉及remove_column时,Rails 3中的更改方法并不聪明,因此您将无法回滚此迁移 .
在rails4应用程序中,也可以使用change方法删除列 . 第三个参数是data_type,在可选的第四个参数中你可以给出选项 . 它有点隐藏在'Available transformations' the documentation部分 .
class RemoveFieldFromTableName < ActiveRecord::Migration def change remove_column :table_name, :field_name, :data_type, {} end end
有两种好方法可以做到这一点:
你可以简单地使用remove_column,如下所示:
remove_column :users, :first_name
如果您只需要对架构进行一次更改,那么这很好 .
您也可以使用change_table块执行此操作,如下所示:
change_table :users do |t| t.remove :first_name end
我更喜欢这个,因为我觉得它更清晰,你可以一次做几个改变 .
以下是支持的change_table方法的完整列表:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
在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
Remove Columns For RAILS 5 App
rails g migration Remove<Anything>From<TableName> [columnName:type]
上面的命令在 db/migrate 目录中生成一个迁移文件 . Snippet blow是Rails生成器生成的表示例中的删除列之一,
db/migrate
class RemoveAgeFromUsers < ActiveRecord::Migration def up remove_column :users, :age end def down add_column :users, :age, :integer end end
我还为Rails做了一个快速参考指南,可以在here找到 .
rails g migration RemoveXColumnFromY column_name:data_type
X =列名Y =表名
EDIT
根据评论将 RemoveXColumnToY 更改为 RemoveXColumnFromY - 为迁移实际执行的操作提供了更清晰的信息 .
RemoveXColumnToY
RemoveXColumnFromY
您可以尝试以下方法:
(Official documentation)
要从表中删除列,您必须在迁移后运行:
rails g migration remove_column_name_from_table_name column_name:data_type
然后运行命令:
给出以下命令,它将自己添加到迁移文件中
rails g migration RemoveColumnFromModel
运行上面的命令后,您可以检查迁移文件remove_column代码必须自己添加
然后迁移数据库
只需简单的3个步骤即可从表中删除列,如下所示:
rails g migration remove_column_from_table_name
在终端中运行此命令后,通过此名称和时间戳创建一个文件(remove_column from_table_name) .
然后转到此文件 .
生成迁移以删除列,以便在迁移时( rake db:migrate ),它应该 drop the column . 如果此迁移已回滚( rake db:rollback ),它应该 add column back .
rake db:rollback
语法:
remove_column :table_name, :column_name, :type
删除列,如果回滚迁移,还会添加列 .
例:
remove_column :users, :last_name, :string
Note :如果跳过data_type,迁移将成功删除列,但如果回滚迁移,则会出错 .
change 中的 remove_column 方法将帮助您从表中删除列 .
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 RemoveColumnNameFromTables column_name:type
即 rails g migration RemoveTitleFromPosts title:string
rails g migration RemoveTitleFromPosts title:string
无论如何,最好考虑停机时间,因为ActiveRecord在运行时缓存数据库列,因此如果删除列,它可能会导致异常,直到您的应用重新启动 .
参考:Strong migration
通过remove_column :table_name, :column_name在迁移文件中
您可以通过键入以下内容直接在rails控制台中删除列:ActiveRecord::Base.remove_column :table_name, :column_name
ActiveRecord::Base.remove_column :table_name, :column_name
16 回答
例如:
将从用户表中删除爱好列 .
对于旧版本的Rails
对于Rails 3及以上版本
Rails 4已更新,因此可以在迁移中使用更改方法删除列,并且迁移将成功回滚 . 请阅读Rails 3应用程序的以下警告:
Rails 3 Warning
请注意,使用此命令时:
生成的迁移将如下所示:
从数据库表中删除列时,请确保不使用change方法(Rails 3应用程序中迁移文件中不需要的示例):
在涉及remove_column时,Rails 3中的更改方法并不聪明,因此您将无法回滚此迁移 .
在rails4应用程序中,也可以使用change方法删除列 . 第三个参数是data_type,在可选的第四个参数中你可以给出选项 . 它有点隐藏在'Available transformations' the documentation部分 .
有两种好方法可以做到这一点:
remove_column
你可以简单地使用remove_column,如下所示:
如果您只需要对架构进行一次更改,那么这很好 .
change_table块
您也可以使用change_table块执行此操作,如下所示:
我更喜欢这个,因为我觉得它更清晰,你可以一次做几个改变 .
以下是支持的change_table方法的完整列表:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
在rails 5中,您可以在终端中使用此命令:
例如,从表用户中删除列access_level(字符串):
然后运行:
Remove Columns For RAILS 5 App
上面的命令在
db/migrate
目录中生成一个迁移文件 . Snippet blow是Rails生成器生成的表示例中的删除列之一,我还为Rails做了一个快速参考指南,可以在here找到 .
X =列名
Y =表名
EDIT
根据评论将
RemoveXColumnToY
更改为RemoveXColumnFromY
- 为迁移实际执行的操作提供了更清晰的信息 .您可以尝试以下方法:
(Official documentation)
要从表中删除列,您必须在迁移后运行:
然后运行命令:
给出以下命令,它将自己添加到迁移文件中
运行上面的命令后,您可以检查迁移文件remove_column代码必须自己添加
然后迁移数据库
只需简单的3个步骤即可从表中删除列,如下所示:
rails g migration remove_column_from_table_name
在终端中运行此命令后,通过此名称和时间戳创建一个文件(remove_column from_table_name) .
然后转到此文件 .
remove_column :table_name, :column_name
rake db:migrate
生成迁移以删除列,以便在迁移时(
rake db:migrate
),它应该 drop the column . 如果此迁移已回滚(rake db:rollback
),它应该 add column back .语法:
remove_column :table_name, :column_name, :type
例:
Note :如果跳过data_type,迁移将成功删除列,但如果回滚迁移,则会出错 .
change
中的remove_column
方法将帮助您从表中删除列 .转到此链接以获取完整参考:http://guides.rubyonrails.org/active_record_migrations.html
这样做;
rails g migration RemoveColumnNameFromTables column_name:type
即
rails g migration RemoveTitleFromPosts title:string
无论如何,最好考虑停机时间,因为ActiveRecord在运行时缓存数据库列,因此如果删除列,它可能会导致异常,直到您的应用重新启动 .
参考:Strong migration
通过
remove_column :table_name, :column_name
在迁移文件中
您可以通过键入以下内容直接在rails控制台中删除列:
ActiveRecord::Base.remove_column :table_name, :column_name