【问题标题】:Model.reset_column_information does not reload columns in rails migrationModel.reset_column_information 不会在 rails 迁移中重新加载列
【发布时间】:2012-02-02 15:51:48
【问题描述】:

我正在使用 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 并且都可以正常工作。

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

【问题讨论】:

    标签: ruby-on-rails activerecord migration rake ruby-on-rails-3.2


    【解决方案1】:

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

    User.connection.schema_cache.clear!
    User.reset_column_information
    

    (对于 Rails 3.2.2)

    【讨论】:

    • 我认为你可能是对的。实际上,我在两次不同的迁移中两次调用User.reset_column_information,这是第二次失败。我通过重新组织我的迁移来修复它,所以我只给reset_column_information 打了一个电话(因为我还没有最终部署该站点,所以返回没有问题)。这个解决方案看起来也可以工作。如果有机会,我会测试它。
    • 我可以确认这可以很好地完成工作。看起来像长时间迁移和对模型的多次更改只有第一个 reset_column_information 有效。清除模式缓存使其工作正常!谢谢:)
    • 非常感谢!这让我很讨厌,因为 Rails 文档清楚地写了一些不同的东西 -> guides.rubyonrails.org/…
    • 有 Rails 2 的选项吗?
    • 我在 Rails 3.2.22 中看到了同样的问题,并通过这个解决方法解决了,谢谢!
    【解决方案2】:

    rails 6 上不需要此功能(在 6.0.0beta3 上测试)。

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

    【讨论】:

    • 有人知道 Rails5 上的情况吗?
    • 这个问题在 Rails 6 上对我来说仍然存在
    • 是的,它似乎仍然存在。作为最初的海报(所有这些年前),我刚刚在一个使用 Rails 6 的新项目中遇到了它。尽管如此,周围的工作似乎仍然有效,所以这至少是一些事情。
    • @ToshihiroYokota 这对我们来说是 Rails 5.2 的一个问题,需要使用公认的答案来解决它:User.connection.schema_cache.clear! User.reset_column_information
    猜你喜欢
    • 2017-04-25
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多