如何在控制器中使用创建的模块

时间:2013-08-25 15:19:51

标签: ruby-on-rails

我从中得到了3根白发。 Rails4.0 / ruby​​ 1.9.3。我在目录test.rb中有文件/lib/moduletest/test。 test.rb看起来像这样:

module Moduletest
   class test
   end
end

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

2 个答案:

答案 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)