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

时间:2019-03-06 14:59:21

标签: ruby-on-rails postgresql activerecord

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

2 个答案:

答案 0 :(得分:0)

我不确定您到底需要什么,但是这样可能会有所帮助:

Model.connection.schema_cache.clear!
Model.reset_column_information 

答案 1 :(得分:0)

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

一旦部署了更新的代码,应该可以安全地删除该列。