我知道我可以在change
迁移中做到这一点,并使其可逆:
add_column :widgets, :color, :string
remove_column :widgets, :flavor, :string
但奇怪的是,change_table
-〉remove
并不是这样工作的,它取的不是params (name, type)
,而是列名的列表(如果试图追加类型参数,它会被解释为列名)。
change_table(:widgets) do |t|
t.column :color, :string
t.remove :flavor, :string # <-- nope! It tries to remove a column named "string"
end
当您尝试这样做时,会出现以下错误:
remove_columns is only reversible if given a type.
是不是还有另一个我忽略的调用?change_table
可能会遗漏这样一个基本用例,这似乎很奇怪,但我在the docs中没有看到任何可以做到这一点的调用。
2条答案
按热度按时间ny6fqffe1#
在实验过程中,我尝试了以下方法,效果很好:
所以我想这就是答案。
06odsfpq2#
ActiveRecord::ConnectionAdapters::Table
通常只是ActiveRecord::ConnectionAdapters::SchemaStatements
周围的一个薄 Package 器-在本例中,remove_columns采用列列表和选项散列。可以传递类型和其他列选项以使迁移可逆。
remove
实际上只提供了第一个参数,即表。