rails跟踪现有列(魔术发生在此处),并在加载加载时使用了.eager_load
的表。.eager_load
产生一个看起来像:
SELECT "models"."id" AS t0_r0,
...
"models"."deprecated_column" as t0_r1,
... as t1_r0,
...
这在大多数情况下都很好。但是在删除列时会变得有问题。
我想知道是否有标记删除列的方法
读取活动记录源代码,看起来PG_ATTRIBUTE将具有attisdropped = true
,则不会选择列。但是我不确定如何通过activerecord迁移设置它。
我不确定您确切需要什么,但是看起来这可能会有所帮助:
Model.connection.schema_cache.clear!
Model.reset_column_information
我在铁路文档中找到了答案,需要设置ignored_columns
:https://api.rubyonrails.org/classes/classes/activerecord/modelschema/modelschema/classchema/classmethods.html#method-i-ignored_columns-3d
部署了更新的代码后,应该安全地删除列。