2013-08-25 45 views
0

我已经从这里获得了3根灰色头发。 Rails4.0/ruby​​ 1.9.3。我在/lib/moduletest/test目录中有test.rb文件。 test.rb看起来像这样:如何在控制器中使用创建的模块

module Moduletest 
    class test 
    end 
end 

如何在我的控制器中实例化这个类?我应该如何使用require命令? Moduletest :: test.new()?

+0

你必须把这个到自动加载路径延伸。 – Mindbreaker

+0

我在我的控制器中需要'moduletest/test',自动加载是'config.autoload_paths + = Dir [“#{config.root}/lib”,“#{config.root}/lib/** /”]' – Ladiko

回答

1

起初,我可以建议您使用“foobar的”,而不是“测试”。 “测试”看起来很像,测试。

返回的问题,也有在控制器使用两种方式,给了你已经正确地加载模块按照意见。

第一个是明确包含它。首选

class ApplicationController < ActionController::Base 
    include ModuleFoo 

    def index 
    bar # Use ModuleFoo's method directly 
    #... 
    end 
end 

二是挂钩在Rails中加载

# ModuleFoo 
module ModuleFoo 
    def bar 
    end 
end 

if defined? ActionController::Base 
    ActionController::Base.class_eval do 
    include ModuleFoo 
    end 
end 

# Controller 
class SomethingController < ApplicationController 
    def some_method 
    bar # use this directly 
    end 
end 
0

你必须把lib目录到您的自动加载路径。所以,Rails的加载文件在启动时:

config/application.rb,并添加:

config.autoload_paths += %W(#{config.root}/lib)

+0

我有'config.autoload_paths + = Dir [“#{config.root}/lib”,“#{config.root}/lib/** /”]''。所以问题是如何创建类。 – Ladiko

+0

尝试'Moduletest :: test.new'应该可以工作。 – Mindbreaker

相关问题