首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创业板模型

创业板模型
EN

Stack Overflow用户
提问于 2012-11-12 18:42:47
回答 1查看 425关注 0票数 3

我创建了一个带有模型的Gem (实际上,它是从主项目中提取出来的),以便在我们平台中的项目之间共享。

我们有几十个模型,所以我没有一个一个地要求它们,而是编写了以下代码:

代码语言:javascript
复制
Gem.find_files("my_gem/models/*.rb").each { |path| require path }

我访问一个在gem文件中包含my_gem的项目,并运行rails c,得到以下输出:

代码语言:javascript
复制
/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)

我的模型之一是使用宝石回形针,奇怪的是:

  1. 如果我删除上面声明的自动加载所有模型的行,则rails c运行良好。
  2. 如果我尝试只包含使用回形针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"‘它们很好地工作,并且我能够处理这个模型。

你们中有谁见过同样的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-13 11:15:03

require改为autoload似乎解决了这个问题

我改变了Gem.find_files("my_gem/models/*.rb").each { |path| require path }

代码语言:javascript
复制
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

现在它起作用了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13349537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档