我从中得到了3根白发。 Rails4.0 / ruby 1.9.3。我在目录test.rb
中有文件/lib/moduletest/test
。 test.rb看起来像这样:
module Moduletest
class test
end
end
如何在控制器中实例化此类?我该如何使用require命令? Moduletest :: test.new()?
答案 0 :(得分:1)
首先,我建议您使用“foobar”而不是“test”。 “测试”看起来很像,测试。
回到问题,有两种方法可以在控制器中使用它,因为你已经根据评论正确加载了模块。
首先要明确包含它。优选
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
答案 1 :(得分:0)
您必须将lib目录放入自动加载路径中。所以Rails在启动时加载你的文件:
config/application.rb
并添加:
config.autoload_paths += %W(#{config.root}/lib)