Rails 5:如何从数据库中删除列?

时间:2016-08-08 01:39:30

标签: ruby-on-rails

使用迁移从表中删除现有列的命令是什么?

我要删除的列是:country:string

从表格中sample_apps

5 个答案:

答案 0 :(得分:58)

要删除包含迁移的列:

rails g migration Remove..From.. col1:type col2:type col3:type

在你的情况下:

rails g migration RemoveCountryFromSampleApps country:string

这将在Rails 5.0中生成以下迁移

class RemoveCountryFromSampleApps < ActiveRecord::Migration[5.0]
  def change
    remove_column :sample_apps, :country, :string
  end
end

答案 1 :(得分:2)

创建迁移文件:

$ rails generate migration RemoveCountryFromSampleApps country:string

在生成的迁移文件中:

class RemoveCountryFromSampleApps < ActiveRecord::Migration
 def change
   remove_column :sample_apps, :country, :string
 end
end

然后运行:

 rake db:migrate

答案 2 :(得分:1)

如果想要删除索引,也可以使用迁移:

rails g migration remove_post_id_from_comments post_id:integer:index

迁移文件:

class RemovePostIdFromComments < ActiveRecord::Migration
  def change
    remove_index :comments, :post_id
    remove_column :comments, :post_id, :integer
  end
end

然后运行:rake db:migrate

答案 3 :(得分:1)

要从表(sample_case)中删除列(此处为国家)

rails generate migration RemoveCountryfromSampleCase country:string

以上命令应生成文件 YYYYMMDDHHMMSS_remove_countryfrom_sample_case.rb 。在 db / migrate 文件夹下

class RemoveCountryFromSampleCase < ActiveRecord::Migration[5.0]
  def change
    remove_column :sample_case, :country, :string
  end
end

就我而言(我做了两列以上)仅出现

 class RemoveCountryFromSampleCase < ActiveRecord::Migration[5.0]
  def change
  end
 end

remove_column 行不存在,所以我手动添加了它,然后触发了命令

rails db:migrate

对我有用。

参考文献https://stackoverflow.com/a/2963582 和 Ruby Active Record迁移指南           https://edgeguides.rubyonrails.org/active_record_migrations.html

答案 4 :(得分:1)

您需要指定类型吗?

为什么这里的样本不只是node -r @babel/register executeMyFileWithESModules.js remove_column :sample_apps, :country?似乎可以正常工作,并消除了出现错误的可能性(文本或字符串)。