我已经从这里获得了3根灰色头发。 Rails4.0/ruby 1.9.3。我在/lib/moduletest/test
目录中有test.rb
文件。 test.rb看起来像这样:如何在控制器中使用创建的模块
module Moduletest
class test
end
end
如何在我的控制器中实例化这个类?我应该如何使用require命令? Moduletest :: test.new()?
我已经从这里获得了3根灰色头发。 Rails4.0/ruby 1.9.3。我在/lib/moduletest/test
目录中有test.rb
文件。 test.rb看起来像这样:如何在控制器中使用创建的模块
module Moduletest
class test
end
end
如何在我的控制器中实例化这个类?我应该如何使用require命令? Moduletest :: test.new()?
起初,我可以建议您使用“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
你必须把lib目录到您的自动加载路径。所以,Rails的加载文件在启动时:
config/application.rb
,并添加:
config.autoload_paths += %W(#{config.root}/lib)
我有'config.autoload_paths + = Dir [“#{config.root}/lib”,“#{config.root}/lib/** /”]''。所以问题是如何创建类。 – Ladiko
尝试'Moduletest :: test.new'应该可以工作。 – Mindbreaker
你必须把这个到自动加载路径延伸。 – Mindbreaker
我在我的控制器中需要'moduletest/test',自动加载是'config.autoload_paths + = Dir [“#{config.root}/lib”,“#{config.root}/lib/** /”]' – Ladiko