删除数据库中表中的多个列。 (导轨)

时间:2015-11-20 17:11:27

标签: mysql ruby-on-rails

我在删除本地数据库中的多个列时遇到问题。

我的表名是'客户'在该表格中,我要删除的两个列是' phone'和'传真'

我一直在尝试一下这个

class CustomerCleanup < ActiveRecord::Migration
  def change_table(:customers) do |t|
      t.remove :fax, :phone
    end
  end
end

但是我仍然会收到一个语法错误,说明意外的tSYMBEG期待&#39;)&#39;

我已经查看过Here中的示例了......我也试过这个以获得相同的错误

class CustomerCleanup < ActiveRecord::Migration
  def change_table(:customers) do |t|
      t.remove :fax
      t.remove :phone
    end
  end
end

有谁知道我在这里做错了什么?

4 个答案:

答案 0 :(得分:5)

你试过了吗?

def change
  remove_column :customers, :fax
  remove_column :customers, :phone
end

如果您使用低于3.x的rails版本

def self.up
 remove_column :customers, :fax
 remove_column :customers, :phone
end

def self.down
  # do something on rollback here or just do nothing
end

答案 1 :(得分:2)

我知道这是一个老问题并且有明确的答案,但没有人解决您的实际语法错误。您正在将方法定义与change_table调用相结合。正确的代码应该是:

class CustomerCleanup < ActiveRecord::Migration
  def change
    change_table(:customers) do |t|
      t.remove :fax
      t.remove :phone
    end
  end
end

答案 2 :(得分:0)

如果您想通过运行迁移从任何表中删除列,请尝试使用

rails g migration remove_columns_from_table_name field_name:datatype field_name:datatype

table_name 替换为要从中删除列的表,将 field_name:data_type 替换为要删除的列的列和数据类型。

迁移文件将如下所示

class RemoveColumnsFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type
    remove_column :table_name, :field_name, :data_type
  end
end

然后运行迁移

rake db:migrate

您还可以通过执行此类操作直接从rails console删除列

ActiveRecord::Migration.remove_column :table_name, :column_name 

答案 3 :(得分:0)

您可以使用remove_columns method

在单个语句中删除多个列
def up
  remove_columns :customers, :fax, :phone
end

但是,如果您希望能够回滚,则必须定义一个单独的down方法。