如何使用 Rails 迁移删除列
通过 Rails 迁移 删除数据库表列的语法是什么?
What's the syntax for dropping a database table column through a Rails migration?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
通过 Rails 迁移 删除数据库表列的语法是什么?
What's the syntax for dropping a database table column through a Rails migration?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(24)
例如:
将从用户表中删除爱好列。
For instance:
would remove the hobby Column from the users table.
对于旧版本的 Rails
For Rails 3 及更高版本
For older versions of Rails
For Rails 3 and up
Rails 4已经更新,所以在迁移中可以使用change方法删除一列,迁移就会成功回滚。请阅读以下针对 Rails 3 应用程序的警告:
Rails 3 警告
请注意,当您使用此命令时:
生成的迁移将如下所示:
确保在从其中删除列时不要使用更改方法数据库表(Rails 3 应用程序中的迁移文件中不希望包含的内容的示例):
Rails 3 中的更改方法在涉及remove_column 时并不智能,因此您将无法回滚此迁移。
Rails 4 has been updated, so the change method can be used in the migration to drop a column and the migration will successfully rollback. Please read the following warning for Rails 3 applications:
Rails 3 Warning
Please note that when you use this command:
The generated migration will look something like this:
Make sure to not use the change method when removing columns from a database table (example of what you don't want in the migration file in Rails 3 apps):
The change method in Rails 3 is not smart when it comes to remove_column, so you will not be able to rollback this migration.
在 Rails4 应用程序中,还可以使用更改方法来删除列。第三个参数是 data_type,在可选的第四个参数中您可以提供选项。它有点隐藏在文档的“可用转换”部分中。
In a rails4 app it is possible to use the change method also for removing columns. The third param is the data_type and in the optional forth you can give options. It is a bit hidden in the section 'Available transformations' on the documentation .
有两种好方法可以做到这一点:
remove_column
您可以简单地使用remove_column,如下所示:
如果您只需要对架构进行一次更改,那么这很好。
我
你也可以使用change_table块来做到这一点,就像这样:
更喜欢这个,因为我发现它更清晰,而且你可以一次进行多项更改。
以下是受支持的change_table方法的完整列表:
http://apidock.com/rails/ActiveRecord/ ConnectionAdapters/SchemaStatements/change_table
There are two good ways to do this:
remove_column
You can simply use remove_column, like so:
This is fine if you only need to make a single change to your schema.
change_table block
You can also do this using a change_table block, like so:
I prefer this as I find it more legible, and you can make several changes at once.
Here's the full list of supported change_table methods:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
清除& Rails 5 和 Rails 的简单说明6
1. 创建迁移
在终端中运行以下命令:
railsgeneratemigrationremove_fieldname_from_tablename fieldname:fieldtype
(按照惯例,表名称采用复数形式。请参阅此处的文档. )示例:
rails g migrationRemoveAcceptedFromQuotesaccepted:boolean
2. 检查迁移
3. 运行迁移
rake db:migrate
或rails db:migrate
(它们都是相同的)......然后你就可以开始比赛了!
Clear & Simple Instructions for Rails 5 & 6
1. Create a migration
Run the following command in your terminal:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
(Table name in plural, as per convention. See the documentation here. )Example:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
2. Check the migration
3. Run the migration
rake db:migrate
orrails db:migrate
(they're both the same)....And then you're off to the races!
生成一个迁移来删除列,这样如果它被迁移 (
rake db:migrate
),它应该删除该列。如果此迁移回滚(rake db:rollback
),它应该重新添加列。语法:
remove_column :table_name, :column_name, :type
示例:
注意:如果您跳过 data_type,迁移将成功删除该列,但如果您回滚迁移,则会引发错误。
Generate a migration to remove a column such that if it is migrated (
rake db:migrate
), it should drop the column. And it should add column back if this migration is rollbacked (rake db:rollback
).The syntax:
remove_column :table_name, :column_name, :type
Example:
Note: If you skip the data_type, the migration will remove the column successfully but if you rollback the migration it will throw an error.
在 Rails 5 中,您可以在终端中使用此命令:
例如从表 users 中删除列 access_level(string):
然后运行:
in rails 5 you can use this command in the terminal:
for example to remove the column access_level(string) from table users:
and then run:
删除 RAILS 5 应用程序的列
上面的命令会在
db/migrate
目录中生成迁移文件。片段打击是 Rails 生成器生成的从表中删除列的示例之一,我还制作了 Rails 的快速参考指南,可以在 此处。
Remove Columns For RAILS 5 App
Command above generate a migration file inside
db/migrate
directory. Snippet blow is one of remove column from table example generated by Rails generator,I also made a quick reference guide for Rails which can be found at here.
您可以尝试以下操作:(
官方文档)
You can try the following:
(Official documentation)
X = 列名称
Y = 表名称
EDIT
根据注释将
RemoveXColumnToY
更改为RemoveXColumnFromY
- 更清楚地了解迁移实际执行的操作。X = column name
Y = table name
EDIT
Changed
RemoveXColumnToY
toRemoveXColumnFromY
as per comments - provides more clarity for what the migration is actually doing.要从表中删除列,您必须运行以下迁移:
然后运行命令:
To remove the column from table you have to run following migration:
Then run command:
change
方法中的remove_column
将帮助您从表中删除该列。请访问此链接以获取完整参考:http://guides.rubyonrails.org/active_record_migrations.html
remove_column
inchange
method will help you to delete the column from the table.Go on this link for complete reference : 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
For removing column from table in just easy 3 steps as follows:
rails g migration remove_column_from_table_name
after running this command in terminal one file created by this name and time stamp (remove_column from_table_name).
Then go to this file.
inside file you have to write
remove_column :table_name, :column_name
Finally go to the console and then do
rake db:migrate
步骤1:创建迁移
步骤2:更改文件迁移中的代码刚刚创建的
rails版本< 3
Rails 版本 >= 3
第 3 步:迁移
Step 1: Create a migration
Step 2: Change code in file migration just created
rails version < 3
rails version >= 3
Step 3: Migrate
给出以下命令,它将自行添加到迁移文件中
运行上述命令后,您可以检查迁移文件remove_column代码必须自行添加
然后迁移数据库
Give below command it will add in migration file on its own
After running above command you can check migration file remove_column code must be added there on its own
Then migrate the db
这是 Rails 控制台的另一项
ActiveRecord::Migration.remove_column(:table_name, :column_name)
Heres one more from rails console
ActiveRecord::Migration.remove_column(:table_name, :column_name)
简单地说,您可以删除列
例如,
Simply, You can remove column
For Example,
首先尝试运行以下命令创建迁移文件:
然后在项目的根目录上运行以下命令运行迁移:
first try to create a migration file running the command:
and then on the root directory of the project run the migration running the command:
通过
删除列:表名,:列名
在迁移文件中
您可以通过键入以下内容直接在 Rails 控制台中删除列:
ActiveRecord::Base.remove_column:table_name, :column_name
Through
remove_column :table_name, :column_name
in a migration file
You can remove a column directly in a rails console by typing:
ActiveRecord::Base.remove_column :table_name, :column_name
这样做;
因此
如果
无论如何,最好也考虑一下停机时间,因为 ActiveRecord 在运行时缓存数据库列, 如果您删除一列,它可能会导致异常,直到您的应用程序重新启动。
参考:强迁移
Do like this;
rails g migration RemoveColumnNameFromTables column_name:type
I.e.
rails g migration RemoveTitleFromPosts title:string
Anyway, Would be better to consider about downtime as well since the ActiveRecord caches database columns at runtime so if you drop a column, it might cause exceptions until your app reboots.
Ref: Strong migration
只需在 Rails 控制台中运行它
或
Just run this in the rails console
or
您可以使用 Rails 迁移命令
来迁移数据库:
you can use rails migration command
than you can migrate the database: