通过Rails迁移删除数据库表列的语法是什么?
当前回答
步骤1:创建迁移
rails g migration remove_column_name_from_table
步骤2:更改刚刚创建的文件迁移中的代码
Rails版本< 3
def change
remove_column :table_name, :column_name, :datatype
end
Rails版本>= 3
def change
remove_column :table_name, :column_name
end
3 .迁移
rake db:migrate
其他回答
在模型中将列标记为忽略
class MyModel < ApplicationRecord
self.ignored_columns = ["my_field"]
end
生成迁移
$ bin/rails g migration DropMyFieldFromMyModel
编辑迁移
class DropMyFieldFromMyModel < ActiveRecord::Migration[6.1]
def change
safety_assured { remove_column :my_table, :my_field }
end
end
运行迁移
$ bin/rails db:migrate
有两种好方法:
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
要从表中删除列,您必须运行以下迁移:
rails g migration remove_column_name_from_table_name column_name:data_type
然后执行命令:
rake db:migrate
你可以尝试以下方法:
remove_column :table_name, :column_name
(官方文档)
在rails 5中,你可以在终端中使用这个命令:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
例如,从user表中删除access_level(string)列:
rails generate migration remove_access_level_from_users access_level:string
然后运行:
rake db:migrate
推荐文章
- 库未加载:libmysqlclient.16。在OS X 10.6上使用mysql2 gem运行'rails server'时出现dylib错误
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- 数据库触发器是必要的吗?
- RVM不是一个函数,用' RVM use…’不会起作用
- 为什么我应该使用基于文档的数据库而不是关系数据库?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将值从同一表中的一列复制到另一列
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 什么是数据库池?
- Rails find_or_create_by多个属性?
- Rails ActiveRecord日期之间
- 关于数据库,每个开发人员应该知道些什么?
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法