Arrayの機能を拡張し、キーが配列に存在するかどうか、配列が空でないかどうかをチェックするメソッドを追加したいのですが、クラスを書き込む場所と、クラスがロードされていることを確認する方法を教えてください。
2 に答える
あなたはそれを入れてlib/
、塩山による答えで概説されているように自動ロードされることを確認することができます。または、イニシャライザに入れることもできます。イニシャライザのアプローチの方が簡単なので、私は少し気に入っています (無料でオートロードを利用できます)。
私は通常、core_ext
ディレクトリのサブディレクトリを作成しinitializers
、コア クラスの拡張機能をそこに配置します。私は常に、拡張されているクラスの名前と追加する内容の説明をファイル名に入れようとします。そのため、あなたの場合、次をRAILS_ROOT/config/initializers/core_ext/array_my_function
含むファイルを作成します。
module MyFunctionForArray
def my_function(arg1, arg2)
# ...
end
end
Array.send :include, MyFunctionForArray
私は常に、クラスを再度開いて直接拡張するのではなく、拡張機能をモジュールに入れ、このモジュールをクラスに含めて拡張するようにしています。
これを行う標準的な方法は、コードを入れて、次lib/
の行を追加してレールによって自動ロードされることを確認することconfig/application.rb
です。
config.autoload_paths += Dir["#{config.root}/lib/**/"]
次に、コード内で、使用する場所でそれが必要であることを確認してください。どこにでも適用したい場合はconfig/initializers
、次の行で初期化子を作成します。
require 'my_array'
my_array.rb
ファイルがある場所のファイルの名前はどこにlib
ありますか。これにより、モデル、コントローラー、ビューなどで使用できるようになります。
関連項目: Rails 3 の lib フォルダーからモジュール/クラスをロードする最良の方法は?
また、この回答で説明されている (レールだけでなく) Ruby でディレクトリ構造を自動ロードする際の落とし穴にも注意してください: Rails 3 の lib フォルダーからモジュール/クラスをロードする最良の方法?