55

我正在使用 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 中的列并重新运行迁移时,它按预期工作。从第一次迁移开始再次使用空数据库并且它不起作用所以它与运行所有迁移而不是单个迁移有关。

我之前在 User 模型上进行了几次迁移,都包含reset_column_information并且都可以正常工作。

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

4

2 回答 2

102

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

User.connection.schema_cache.clear!
User.reset_column_information

(对于 Rails 3.2.2)

于 2012-03-15T20:55:42.033 回答
0

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

我尝试了update!(new_column: ...)update_all(new_column: ...)

于 2019-04-22T23:24:53.457 回答