我创建了一个带有模型的Gem (实际上,它是从主项目中提取出来的),以便在我们平台中的项目之间共享。
我们有几十个模型,所以我没有一个一个地要求它们,而是编写了以下代码:
Gem.find_files("my_gem/models/*.rb").each { |path| require path }我访问一个在gem文件中包含my_gem的项目,并运行rails c,得到以下输出:
/Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/dynamic_matchers.rb:50:in `method_missing': undefined method `has_attached_file' for #<Class:0x007fad4b93ccb8> (NoMethodError)我的模型之一是使用宝石回形针,奇怪的是:
rails c运行良好。require "my_gem/models/paperclip_model"的模型,则会收到相同的错误。因此,我将gem更改为不加载任何模型,当我试图从rails控制台引用任何模型时,它会说类没有加载,但是我运行了Gem.find_files("my_gem/models/*.rb").each { |path| require path }或require "my_gem/models/paperclip_model"‘它们很好地工作,并且我能够处理这个模型。
你们中有谁见过同样的问题吗?
发布于 2012-11-13 11:15:03
将require改为autoload似乎解决了这个问题
我改变了Gem.find_files("my_gem/models/*.rb").each { |path| require path }
为
Gem.find_files("my_gem/models/*.rb").each do |f|
filename = File.basename(f, '.*')
class_name_symbol = filename.classify.to_sym
autoload class_name_symbol, "my_gem/models/#{filename}"
end现在它起作用了。
https://stackoverflow.com/questions/13349537
复制相似问题