Ruby on rails 3 宝石与模型
我创建了一个带有模型的Gem(实际上是从主项目中提取出来的),以便在我们平台中的项目之间共享 我们有几十个模型,因此我没有逐一要求它们,而是编写了以下代码:Ruby on rails 3 宝石与模型,ruby-on-rails-3,gem,paperclip,Ruby On Rails 3,Gem,Paperclip,我创建了一个带有模型的Gem(实际上是从主项目中提取出来的),以便在我们平台中的项目之间共享 我们有几十个模型,因此我没有逐一要求它们,而是编写了以下代码: Gem.find_files("my_gem/models/*.rb").each { |path| require path } 我访问其中一个在gem文件中包含我的gem的项目,并运行rails c,我得到以下输出: /Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3
Gem.find_files("my_gem/models/*.rb").each { |path| require path }
我访问其中一个在gem文件中包含我的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)
/Users/myuser/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active\u record/dynamic\u matchers.rb:50:in'method\u missing':未定义的方法'has#attached_file'(命名错误)
我的一个模型使用的是宝石回形针,奇怪的是:
rails c
运行正常gem.find_文件(“my_gem/models/*.rb”)。每个{path | require path}
或都需要“my_gem/models/paperclip_model”
“它们工作得很好,我可以使用该模型
你们中有人看到过同样的问题吗?这听起来像是gem中的一个模型依赖于回形针,但您没有明确地将其设置为依赖项。因此,如果您的模型在装入回形针之前装入,您将看到
已附加文件的未定义方法错误
如果您在Rails应用程序中使用的模型依赖于曲别针,并且在控制台(或服务器)启动后加载这些模型,曲别针将出现,因此您不会看到此错误
解决方案是在gemspec中明确添加回形针作为依赖项,如:
s.add_dependency('paperclip')
假设这个gem总是在Rails应用程序的上下文中使用,这应该是可行的。如果没有,您可能还需要在使用回形针的模型顶部添加以下行:
require "paperclip"
似乎更改自动加载的要求
解决了问题
我更改了Gem.find_文件(“my_Gem/models/*.rb”)。每个{path | require path}
为了
现在它开始工作了。你在Rails代码中的什么地方调用Gem.find_文件(“my_Gem/models/*.rb”)。每个{path{require path}
源代码?感谢你的分享,帮了我很多忙:)奇怪的是,require没有工作
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