迁移从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
如果它是一个有效的替代方案,那么只需编写那么简单的迁移吗?
答案 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.
如果您不需要撤消迁移,则可以省略额外的参数。