0

私はこれで白髪が3本増えました。Rails4.0/ルビー1.9.3。test.rbディレクトリにファイルがあります/lib/moduletest/test。test.rb は次のようになります。

module Moduletest
   class test
   end
end

コントローラーでこのクラスをインスタンス化するにはどうすればよいですか? require コマンドはどのように使用すればよいですか? Moduletest::test.new() ?

4

2 に答える 2

1

まず、「test」の代わりに「foobar」を使用することをお勧めします。"test" は本当に、test のように見えます。

質問に戻りますが、コメントに従ってモジュールを正しくロードしていれば、コントローラーで使用する方法は 2 つあります。

1 つ目は、明示的に含めることです。優先

class ApplicationController < ActionController::Base
  include ModuleFoo

  def index
    bar # Use ModuleFoo's method directly
    #...
  end
end

2 つ目は、拡張機能を 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 に答える