我正在使用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_aid
。 User.column_names
在调用reset_column_information
之前和之后显示相同的列表。
奇怪的是,当我手动删除mysql中的列并重新运行迁移时,它按预期工作。从第一次迁移开始,再次使用空数据库并且它不起作用,因此它与运行所有迁移而不是单个迁移有关。
我之前有一些关于用户模型的迁移,两者都包含reset_column_information
,两者都可以正常工作。
我真的在这个问题上摸不着头脑 - 任何人都有任何想法
答案 0 :(得分:83)
我认为这必定是与架构缓存相关的某种错误......这可能有效:
User.connection.schema_cache.clear!
User.reset_column_information
(对于Rails 3.2.2)
答案 1 :(得分:0)
在rails 6(在6.0.0beta3上测试)上不需要。
我同时尝试了update!(new_column: ...)
和update_all(new_column: ...)