/lib
私は独自の方法でファイルを持っています。
# lib/file.rb
class File < ApplicationController
def my_method
...
end
end
ただし、コンソールからメソッドに到達できません
ruby-1.9.2-p290 :044 > File.my_method
NoMethodError: undefined method `my_method' for File:Class
方法はありますか?
/lib
私は独自の方法でファイルを持っています。
# lib/file.rb
class File < ApplicationController
def my_method
...
end
end
ただし、コンソールからメソッドに到達できません
ruby-1.9.2-p290 :044 > File.my_method
NoMethodError: undefined method `my_method' for File:Class
方法はありますか?
my_method
File
クラスのインスタンスメソッドです。File
これは、クラスのインスタンスでのみ呼び出すことができることを意味します。
file = File.new
file.my_method
構文my_method
を使用してクラス メソッドとして宣言できます。def self.my_method
class File < ApplicationController
def self.my_method
...
end
end
File.my_method
File
ただし、クラス メソッドでは、オブジェクトのインスタンス変数を使用できません。
クラス メソッドとして呼び出そうとしてmy_method
いますが、インスタンス メソッドとして定義しています。
として定義するかdef self.my_method
、コントローラのインスタンスを作成してインスタンス メソッドとして呼び出す必要があります。
さらに、いくつかの理由で問題が発生することになります。(1) Rails はコントローラーに のような名前が付けられることを想定してFilesController
おり、(2)File
は標準ライブラリのクラスです。両方の問題を防ぐために、クラス名をFilesController
に変更し、ファイル自体の名前を に変更することをお勧めします。files_controller.rb
ええと...この例ではいくつかの興味深いことが起こっています。1つ目は、このクラス名がFile
Rubyですでに定義されている呼び出しであるということです。
これが、コンソールを使用しているときに未定義のクラスエラーが発生しなかった理由である可能性があります。my_method
はRubyのクラスで定義されていないためFile
、未定義のメソッドが表示されるのはこのためです。
今あなたの質問に。最初にクラスに別の名前を付けて、からもう一度試してみますlib
。Rails環境でデフォルトで再度ロードする必要があると思います。1つか2つのバージョンでは、その機能は削除されましたが、元に戻ったと言いたいです。そうでない場合は、config/application.rb
ファイルに移動して、の行に沿って宣言を探してくださいconfig.autoload_paths
。そこにディレクトリを追加lib
すれば、準備は完了です。
最後に、コントローラーが必要な理由はありますlib
か?