私はこれで白髪が3本増えました。Rails4.0/ルビー1.9.3。test.rb
ディレクトリにファイルがあります/lib/moduletest/test
。test.rb は次のようになります。
module Moduletest
class test
end
end
コントローラーでこのクラスをインスタンス化するにはどうすればよいですか? require コマンドはどのように使用すればよいですか? Moduletest::test.new() ?
私はこれで白髪が3本増えました。Rails4.0/ルビー1.9.3。test.rb
ディレクトリにファイルがあります/lib/moduletest/test
。test.rb は次のようになります。
module Moduletest
class test
end
end
コントローラーでこのクラスをインスタンス化するにはどうすればよいですか? require コマンドはどのように使用すればよいですか? Moduletest::test.new() ?
まず、「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