0

我已经有 3 根白发了。Rails4.0/红宝石 1.9.3。我test.rb在目录中有文件/lib/moduletest/test。test.rb 看起来像这样:

module Moduletest
   class test
   end
end

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

4

2 回答 2

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
于 2013-08-25T16:18:48.083 回答
0

您必须将 lib 目录放入您的自动加载路径中。所以 Rails 在启动时加载你的文件:

config/application.rb并添加:

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

于 2013-08-25T15:24:02.637 回答