Eth*_*han 600 ruby database activerecord ruby-on-rails rails-migrations
通过Rails迁移删除数据库表列的语法是什么?
小智 878
remove_column :table_name, :column_name
Run Code Online (Sandbox Code Playgroud)
例如:
remove_column :users, :hobby
Run Code Online (Sandbox Code Playgroud)
将从用户表中删除业余爱好列.
pra*_*abu 364
对于旧版本的Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Run Code Online (Sandbox Code Playgroud)
对于Rails 3及以上版本
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Run Code Online (Sandbox Code Playgroud)
Pow*_*ers 116
Rails 4已更新,因此可以在迁移中使用更改方法删除列,并且迁移将成功回滚.请阅读Rails 3应用程序的以下警告:
Rails 3警告
请注意,使用此命令时:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Run Code Online (Sandbox Code Playgroud)
生成的迁移将如下所示:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
Run Code Online (Sandbox Code Playgroud)
从数据库表中删除列时,请确保不使用change方法(Rails 3应用程序中迁移文件中不需要的示例):
def change
remove_column :table_name, :field_name
end
Run Code Online (Sandbox Code Playgroud)
当涉及remove_column时,Rails 3中的更改方法并不聪明,因此您将无法回滚此迁移.
Lar*_*ter 36
在rails4应用程序中,也可以使用change方法删除列.第三个参数是data_type,在可选的第四个参数中你可以给出选项.它在文档的 "可用转换"部分中有点隐藏.
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Run Code Online (Sandbox Code Playgroud)
sup*_*ary 25
有两种好方法可以做到这一点:
你可以简单地使用remove_column,如下所示:
remove_column :users, :first_name
Run Code Online (Sandbox Code Playgroud)
如果您只需要对架构进行一次更改,那么这很好.
您也可以使用change_table块执行此操作,如下所示:
change_table :users do |t|
t.remove :first_name
end
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个,因为我觉得它更清晰,你可以一次做几个改变.
以下是支持的change_table方法的完整列表:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
asc*_*mid 14
在rails 5中,您可以在终端中使用此命令:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
Run Code Online (Sandbox Code Playgroud)
例如,从表用户中删除列access_level(字符串):
rails generate migration remove_access_level_from_users access_level:string
Run Code Online (Sandbox Code Playgroud)
然后运行:
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
Jor*_*ing 11
您可以尝试以下方法:
remove_column :table_name, :column_name
Run Code Online (Sandbox Code Playgroud)
(官方文件)
Lor*_*lor 11
删除RAILS 5应用程序的列
rails g migration Remove<Anything>From<TableName> [columnName:type]
Run Code Online (Sandbox Code Playgroud)
上面的命令在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
Run Code Online (Sandbox Code Playgroud)
我也为Rails做了一个快速参考指南,可以在这里找到.
Imr*_*ran 11
生成迁移以删除列,如果它已迁移(rake db:migrate),则应删除该列.如果这个迁移是rollbacked(),它应该添加列rake db:rollback.
语法:
remove_column:table_name,:column_name,:type
删除列,如果回滚迁移,还会添加列.
例:
remove_column :users, :last_name, :string
Run Code Online (Sandbox Code Playgroud)
注意:如果跳过data_type,迁移将成功删除列,但如果您回滚迁移,则会出错.
ede*_*den 10
rails g migration RemoveXColumnFromY column_name:data_type
Run Code Online (Sandbox Code Playgroud)
X =列名
Y =表名
编辑
改变RemoveXColumnToY以RemoveXColumnFromY按注释-提供什么样的迁移实际上做的更清晰.
BKS*_*eon 10
警告:如果从数据库中删除列,则会丢失数据。要继续,请参见以下内容:
rails generate migration remove_fieldname_from_tablename fieldname:string
例:
accepted从quotes表中删除该列(一个布尔值):rails g migration RemoveAcceptedFromQuotes accepted:boolean
有一个特殊的语法捷径可以生成将字段添加到表的迁移。
Rails生成迁移add_fieldname_to_tablename fieldname:string
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
Run Code Online (Sandbox Code Playgroud)
rake db:migrate
....然后您就可以参加比赛了!
小智 8
要从表中删除列,您必须在迁移后运行:
rails g migration remove_column_name_from_table_name column_name:data_type
Run Code Online (Sandbox Code Playgroud)
然后运行命令:
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
小智 5
给出以下命令,它将自己添加到迁移文件中
rails g migration RemoveColumnFromModel
Run Code Online (Sandbox Code Playgroud)
运行上面的命令后,您可以检查迁移文件remove_column代码必须自己添加
然后迁移数据库
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
小智 5
remove_columnin change方法将帮助您从表中删除列。
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Run Code Online (Sandbox Code Playgroud)
继续以下链接以获取完整参考:http : //guides.rubyonrails.org/active_record_migrations.html
只需简单的3个步骤即可从表中删除列,如下所示:
rails g migration remove_column_from_table_name
在终端中运行此命令后,通过此名称和时间戳创建一个文件(remove_column from_table_name).
然后转到此文件.
你要编写的内部文件
remove_column :table_name, :column_name
最后去控制台,然后做
rake db:migrate
小智 5
第 1 步:创建迁移
rails g migration remove_column_name_from_table
Run Code Online (Sandbox Code Playgroud)
步骤2:更改刚刚创建的文件迁移中的代码
导轨版本 < 3
def change
remove_column :table_name, :column_name, :datatype
end
Run Code Online (Sandbox Code Playgroud)
Rails 版本 >= 3
def change
remove_column :table_name, :column_name
end
Run Code Online (Sandbox Code Playgroud)
第 3 步:迁移
rake db:migrate
Run Code Online (Sandbox Code Playgroud)