Rails找不到刚刚创建的数据库列

时间:2013-05-08 23:37:28

标签: ruby-on-rails database serialization

我只是运行迁移,将:new_column添加到:my_table这是一个序列化的列(整个项目中的第一个),因此我已将配置添加到模型中:

serialize :new_column, Array

我的迁移如下:

add_column :my_table, :new_column, :text

之后,我运行了rake db:reset,以便为新数据设定种子,然后检入rails console以确保数据已正确添加到我的:new_column。它就在那里。

到目前为止很好,但是 ...在rails server内,我的应用程序只会停止错误:

ActiveModel::MissingAttributeError in TestController#index
missing attribute: new_column

嗯,我所知道的是我的控制器正试图访问@my_table_model.new_column。我还检查了schema.db,一切都很好。

可能导致什么?

2 个答案:

答案 0 :(得分:3)

解决!这是一个Rails.cache问题。

确实正在填充数据库,但是缓存了先前模式中的某些属性,并且当控制器尝试访问时,返回了前一个对象(一个没有:new_column_field)。所以最终的解决方案非常简单:

  Rails.cache.clear

感谢WhitSunxperous帮助我。 :)

答案 1 :(得分:0)

还请确保您没有使用数据库模式缓存转储“功能”。

例如,对于非常大的部署,其中许多Pod /服务器/独角兽/工人/线程正在访问同一个数据库,使用以下方法创建模式转储可能很有用:

RAILS_ENV=$RAILS_ENV bundle exec rake db:schema:cache:dump

这有助于减少部署期间对数据库的访问,从而提高性能。

但是,您必须确保在完成所有迁移之后启动新的Pod /服务器,否则,架构高速缓存将包含对数据库的旧引用。

此处有更多详细信息:https://kirshatrov.com/2016/12/13/schema-cache/