序列化时未定义的类/模块

时间:2017-02-14 16:39:39

标签: ruby-on-rails serialization eager-loading

我在ActiveRecord模型中存储了一个类型化对象数组,如:

class Store::Bin < ActiveRecord::Base
  serialize :items, Array
end

class Store::Item
   include Virtus.model
   attribute :name, String
   ...
end

当我在development模式下更改代码并刷新浏览器时,我收到undefined class/module Store::Item例外。

似乎有些东西正在加入类加载。所有文件都在app/models/store/...目录中,正确命名为w / r到其camelcase名称。

使用rails控制台时会出现同样的问题。 reload!无法解决控制台中的问题;相反,我必须退出并重新启动控制台。

2 个答案:

答案 0 :(得分:1)

向阵列添加类型似乎可以解决问题....但是导致相关FactoryGirl工厂出现问题。

class Store::Bin < ActiveRecord::Base
  serialize :items, Array[Store::Item]
end

更新:真正的问题是,当对store / bin.rb进行代码更改时,该类会自动加载,但自动加载器不知道Store :: Item是依赖项。

THE REAL FIX:使用require_dependency

声明所需的依赖项
require_dependency "store/item"
class Store::Bin < ActiveRecord::Base
  serialize :items, Array
end

答案 1 :(得分:0)

由于Rails自动加载问题,在定义类时应该避免使用::运算符。相反,尝试

module Store
  class Item
     # ...
  end
end

如果您不确定发生了什么,可以使用Module.nesting找出Rails如何解释层次结构。