2012-01-15 12 views
0

libフォルダ内に新しいライブラリファイルsampler.rbが作成されました。私はapplication_controllerでそれを含めてconfig\initializersに必要ステートメントを追加したレールのコントローラからライブラリファイルにアクセスできません

module Sampler 
    def sample_tester 
     "test" 
    end 
end 

ファイルの内容としてこれを考えてみましょう。私は私のコントローラからのメソッドsample_testerにアクセスしようとすると、私は次のエラーを取得する

undefined local variable or method `sample_tester` for #<BlogsController:0xb8fbac8> 

私は何かが足りないのですか?

+0

必要なのでしょうか? self.sample_tester? – jstim

+0

イニシャライザのコードと使用するコントローラの部分を追加します。 – phoet

答えて

1

このインスタンスを作成しているように見えないので、最初に推測するのは、クラスメソッドとして定義して、Sampler.sample_testerのように呼び出すことができるということです。

はあなたのファイルでは、それが次のいずれかの方法で行うことができます:あなたはクラスメソッドの数を定義したい場合は

# first way 
module Sampler 
    def self.sample_tester 
    "test" 
    end 
end 

# second way 
module Sampler 
    class << self 
    def sample_tester 
     "test" 
    end 
end 

第二の方法は、よりよいです。

1

あなたのモジュールメソッドを使用すると、拡張の代わりに含める使用する必要があるクラスメソッドとして定義したい場合:あなたの代わりにクラスメソッドとして定義する

module Mod 
    def bla 
    puts "bla" 
    end 
end 

class String 
    include Mod 
end 

String.bla rescue puts $! # => undefined method `bla' for String:Class 

class String 
    extend Mod 
end 

puts String.bla # => bla 
+0

ライブラリファイル(/ libフォルダ内のファイル)をレールでどの程度正確に使用できるかを説明するリンクはありますか? – Rahul

+0

他のルビファイルと同様に使用できます。 libフォルダをautoload-pathに追加すると、各要求時に自動的にreloadされます。 stufをイニシャライザに入れた場合、これは初期化時にのみリロードされます。http://guides.rubyonrails.org/initialization.html – phoet

関連する問題