2013-03-12 38 views
0

我有我的导轨应用程序。我有类导轨调用类方法

class ParserPlugin < ApplicationController 
    def self.loadPlugins 
    Dir.foreach("/plugins") do |f| 
     if f != '.' and f != '..' 
     load("/plugins" + f.to_s) 
     end 
    end 
    end 
    def self.createplugin 
    @@plugins << self.new 
    end 
end 

而且我用“rails c”开始项目。如果我尝试打电话“ParserPlugin.loadPlugins”它显示

NameError: uninitialized constant ParserPlugin 

你能给我一些帮助吗?

回答

0

确保文件名与类名匹配。对于文件名:

class ParserPlugin < ... 

应该parser_plugin.rb否则你会得到错误

NameError: uninitialized constant ParserPlugin 

我假设文件在/app/controllers因为它是从ApplicationController类继承。

+0

谢谢!有用 – Andrii 2013-03-12 20:32:47

0

Rails使用延迟加载,这意味着它会在您的常量出现时分析它们并查找匹配的文件。并非所有类都在启动时加载 - 这是第一次尝试访问ParserPlugin时发生的情况。在这种情况下,Rails正在您的一个自动加载目录(可能是controllers,基于您设置的继承)中寻找名为parser_plugin.rb的文件。

一个方面说明:这很可能不应该从ApplicationController继承。如果它不是控制器,则不应连接到控制器。把它放在别的地方。