Rails跟踪现有列(magic happens here),并在使用.eager_load
加载联接表时使用它。 .eager_load
产生一个SQL查询,如下所示:
SELECT "models"."id" AS t0_r0,
...
"models"."deprecated_column" as t0_r1,
... as t1_r0,
...
这在大多数情况下都适用。但是在删除列时会出现问题。
我想知道是否存在用于标记要删除的列的rails方法,以便将来不为将来的负载选择它。
读取活动记录源代码,看起来如果pg_attribute具有attisdropped = true
,则不会选择该列。但是我不确定如何通过activerecord迁移进行设置。
答案 0 :(得分:0)
我不确定您到底需要什么,但是这样可能会有所帮助:
Model.connection.schema_cache.clear!
Model.reset_column_information
答案 1 :(得分:0)
我在Rails文档中找到了答案,需要设置ignored_columns
:https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns-3D
一旦部署了更新的代码,应该可以安全地删除该列。