我在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!
无法解决控制台中的问题;相反,我必须退出并重新启动控制台。
答案 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如何解释层次结构。