如何在ActiveRecord PostgreSQL中标记要删除或排除的列?

问题描述 投票:0回答:2

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迁移设置它。

ruby-on-rails postgresql activerecord
2个回答
0
投票

我不确定你到底需要什么,但看起来这可能会有所帮助:

Model.connection.schema_cache.clear!
Model.reset_column_information 

0
投票

我在Rails文档中找到了答案,需要设置ignored_columnshttps://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns-3D

部署更新的代码后,删除列应该是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.