迁移:省略`remove_column`参数

时间:2014-07-24 15:04:55

标签: ruby-on-rails-4 rails-migrations

迁移从db表中删除不再需要的列。迁移使用与创建时相同的列参数。

class RemoveSalaryCodeFromProject < ActiveRecord::Migration
    def change
        remove_column :projects, :salary_code, :string, limit: 1, default: 'A', null: false
    end
end

以下是上述迁移的替代写作吗?这意味着它应该与remove_column及其所有参数完全相同。

class RemoveSalaryCodeFromProject < ActiveRecord::Migration
    def change
        remove_column :projects, :salary_code
    end
end

如果它是一个有效的替代方案,那么只需编写那么简单的迁移吗?

2 个答案:

答案 0 :(得分:1)

TLDR:如果您不关心回滚,可以简化它。

一般情况下,你可以使用

remove_column :table, :column_name

它将删除该列。

但是,如果你想在一个功能齐全的change方法中使用它,你需要提供额外的参数。

def change
  remove_column :projects, :salary_code, :string, limit: 1, default: 'A', null: false
end

以便在回滚时使用add_column

检查docs

答案 1 :(得分:1)

如果您需要使用rake db:rollback回滚(即撤消)迁移,它只会在您提供所有这些参数时起作用,否则您会得到类似的内容:

ActiveRecord::IrreversibleMigration:

remove_column is only reversible if given a type.

如果您不需要撤消迁移,则可以省略额外的参数。