如何使用Rails迁移删除列

▼魔方 西西 提交于 2020-01-07 00:22:35

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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


#1楼

rails g migration RemoveXColumnFromY column_name:data_type

X =列名
Y =表名

编辑

更改RemoveXColumnToYRemoveXColumnFromY按照注释-提供什么样的迁移实际上做的更清晰。


#2楼

Rails 4已更新,因此可以在迁移中使用更改方法删除列,并且迁移将成功回滚。 请阅读Rails 3应用程序的以下警告:

Rails 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

当涉及remove_column时,Rails 3中的更改方法并不聪明,因此您将无法回滚此迁移。


#3楼

给出以下命令,它将自己添加到迁移文件中

rails g migration RemoveColumnFromModel

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

然后迁移数据库

rake db:migrate

#4楼

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

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楼

在rails4应用程序中,也可以使用change方法删除列。 第三个参数是data_type,在可选的第四个参数中你可以给出选项。 它在文档的 “可用转换”部分中有点隐藏。

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!