Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 宝石与模型_Ruby On Rails 3_Gem_Paperclip - Fatal编程技术网

Ruby on rails 3 宝石与模型

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(实际上是从主项目中提取出来的),以便在我们平台中的项目之间共享

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

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更改为不加载任何模型,当我尝试从rails控制台引用任何模型时,它表示该类未加载,但随后我运行
    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