Rails跟踪现有列(magic happens here)并在使用.eager_load
加载连接表时使用它。 .eager_load
生成一个SQL查询,如下所示:
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
我在Rails文档中找到了答案,需要设置ignored_columns
:https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns-3D
部署更新的代码后,删除列应该是安全的。