宝石模型和未缓存的类

时间:2014-03-18 15:12:39

标签: ruby-on-rails autoload

我有一些常见模型的宝石,我试图集成到两个rails应用程序中。 (注意,其中一个应用程序是Rails 2.3)

此时似乎一切正常,但我得到了

can't dup NilClass

在使用给定模型的第二个请求上。

设置config.cache_classes = true将解决此问题,但显然不适合开发模式。

在Google上搜索我发现了unloadable指令的一些引用,所以我尝试将其添加到我的宝石模型中:

class User < ActiveRecord::Base
  unloadable
  #stuff
end

这导致Rails爆炸说它无法找到常数。

我真的只需要一种方法来告诉rails应用程序在开发模式下重新加载gem类,而不是像现在这样扔掉它们。

1 个答案:

答案 0 :(得分:0)

好的,问题最终还是自动加载路径。

由于模型有一些难以满足的依赖,一次要求它们,我有一个看起来像的models.rb文件:

autoload :User, 'my_gem/models/user'
autoload :Role, 'my_gem_models/role'

这意味着它是手动自动加载的,而不是Rails autoload_path范例的一部分。只需拉入ActiveSupport :: Dependencies并将models目录附加到自动加载路径就可以了。

ActiveSupport::Dependencies.autoload_paths += Dir.glob "#{File.expand_path("../my_gem/models/", __FILE__)}/**/"