Answers:
remove_column :table_name, :column_name
例如:
remove_column :users, :hobby
将从用户表中删除爱好列。
remove_column :table_name, :column_name, :type, :options
在change
方法中使用,因为如果指定类型,则可以恢复迁移。从文档:在type
和options
参数将如果存在被忽略。在迁移change
方法中提供这些内容可能会有所帮助,以便可以还原它。在这种情况下,type
并且options
将add_column使用。
change
方法中的列,但前提是您指定了列类型。例如remove_column, :table_name, :column_name, :column_type
。否则,在尝试运行迁移时会出现以下错误:remove_column is only reversible if given a type
对于旧版本的Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
适用于Rails 3及更高版本
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
也有效
AddXXXtoTTT
一个RemoveXXXFromTTT
可以跟随filed_name的白名单间隔:DATA_TYPE,并且将创建的适当add_column和remove_column语句:rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
除去使用单个迁移两个属性。另请注意,remove_column
方法不支持change
,因此您必须同时编写up
和down
。
change
对此提供了支持。回滚按应有的方式进行。
change
方法*,则需要告知数据类型(以及所有其他字段修饰符),因此,如果回滚该迁移,则可以正确地重新创建该字段。*当我说还原时,这是在数据库结构方面,当然,该列中的数据显然会丢失。
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
从数据库表中删除列时,请确保不要使用更改方法(例如,Rails 3应用程序的迁移文件中您不想要的示例):
def change
remove_column :table_name, :field_name
end
在谈到remove_column时,Rails 3中的change方法并不明智,因此您将无法回滚此迁移。
change
方法,则该rake db:rollback
命令将出错。 rake db:rollback
与基本上相反rake db:migrate
。此错误已在Rails 4中修复:)
有两种很好的方法可以做到这一点:
您可以简单地使用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
生成迁移以删除列,这样,如果要迁移(rake db:migrate
),则应删除column。如果此迁移已回滚(),则应添加列回rake db:rollback
。
语法:
remove_column:table_name,:column_name,:type
删除列,如果回滚迁移,则还添加列回。
例:
remove_column :users, :last_name, :string
注意:如果跳过data_type,则迁移将成功删除该列,但是如果回滚迁移,则会引发错误。
在终端中运行以下命令:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
注意:根据rails约定,表名应为复数形式。
例:
就我而言,我想accepted
从quotes
表中删除该列(一个布尔值):
rails g migration RemoveAcceptedFromQuotes accepted:boolean
请参阅文档 re:在表中添加/删除字段时的约定:
有一个特殊的语法捷径可以生成将字段添加到表的迁移。
Rails生成迁移add_fieldname_to_tablename fieldname:fieldtype
# 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
rake db:migrate
....然后您就可以参加比赛了!
rails db:migrate
删除RAILS 5 App的列
rails g migration Remove<Anything>From<TableName> [columnName:type]
上面的命令在db/migrate
目录内生成一个迁移文件。片段打击是由Rails生成器从表示例中删除列之一,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
我还制作了一个有关Rails的快速参考指南,可以在这里找到。
rails g migration RemoveXColumnFromY column_name:data_type
X =列名
Y =表名
编辑
改变RemoveXColumnToY
以RemoveXColumnFromY
按注释-提供什么样的迁移实际上做的更清晰。
remove_column
in change
方法将帮助您从表中删除列。
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
继续以下链接以获取完整参考: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
来自Rails Console的继承人
ActiveRecord::Migration.remove_column(:table_name, :column_name)
up
和down
方法(而不是)中执行此操作change
,如@Powers的答案中所述。