我已经有 3 根白发了。Rails4.0/红宝石 1.9.3。我test.rb
在目录中有文件/lib/moduletest/test
。test.rb 看起来像这样:
module Moduletest
class test
end
end
如何在我的控制器中实例化这个类?我应该如何使用 require 命令?模块测试::test.new() ?
我已经有 3 根白发了。Rails4.0/红宝石 1.9.3。我test.rb
在目录中有文件/lib/moduletest/test
。test.rb 看起来像这样:
module Moduletest
class test
end
end
如何在我的控制器中实例化这个类?我应该如何使用 require 命令?模块测试::test.new() ?
首先,我建议您使用“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
您必须将 lib 目录放入您的自动加载路径中。所以 Rails 在启动时加载你的文件:
config/application.rb
并添加:
config.autoload_paths += %W(#{config.root}/lib)