续集迁移 - 如果表尚未添加列,则仅添加列

时间:2015-06-24 20:15:40

标签: ruby migration sequel

我正在尝试创建一个通过表列表的Sequel迁移,如果该表还没有该列,则尝试添加一个特定的列。

例如:

Sequel.migration do
  change do
    table_list = [:table1, :table2, :table3]

    table_list.each do |t|
      if t does not have :specific_column yet
        alter_table(t) do
          add_column :sepcific_column, type: String
        end
      end
    end
  end
end

是否可以判断该列是否已存在于表中,因此我可以相应地执行操作?

1 个答案:

答案 0 :(得分:1)

是的,有可能。方法Dataset#columns返回列列表。可以使用include?

检查此结果

完整示例:

Sequel.migration do
  change do
    table_list = [:table1, :table2, :table3]

    table_list.each do |t|
      if ! self[t].columns.include?(:specific_column)
        alter_table(t) do
          add_column :specific_column, type: String
        end
      end
    end
  end
end

Sequel.migration do
  change do
    table_list = [:table1, :table2, :table3]

    table_list.each do |t|
        alter_table(t) do
          add_column :specific_column, type: String
        end unless self[t].columns.include?(:specific_column)
      end
    end
  end
end