Model.reset_column_information不会在rails迁移中重新加载列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Model.reset_column_information不会在rails迁移中重新加载列相关的知识,希望对你有一定的参考价值。

我正在使用Rails 3.2并进行包含以下代码的迁移:

add_column :users, :gift_aid, :integer, :default => 2
# reset columns
User.reset_column_information

... code here to load legacy data from sqlite3 database ...

# now create a user with the loaded column data
user = User.create( ...other cols..., 
                    :gift_aid => migrated_gift_aid_column_data,
                    ...other cols... )

我在运行迁移时得到了unknown attribute: gift_aidUser.column_names在调用reset_column_information之前和之后显示相同的列表。

奇怪的是,当我手动删除mysql中的列并重新运行迁移时,它按预期工作。从第一次迁移开始,再次使用空数据库并且它不起作用,因此它与运行所有迁移而不是单个迁移有关。

我之前有几个关于User模型的迁移,都包括reset_column_information,两者都可以正常工作。

我真的在这个问题上摸不着头脑 - 任何人都有任何想法

答案

我认为这必须是与模式缓存相关的某种错误...这可能有效:

User.connection.schema_cache.clear!
User.reset_column_information

(对于Rails 3.2.2)

另一答案

在rails 6上不需要这个(在6.0.0beta3上测试)。

我和update!(new_column: ...)update_all(new_column: ...)都试过了

以上是关于Model.reset_column_information不会在rails迁移中重新加载列的主要内容,如果未能解决你的问题,请参考以下文章