2012-01-15 57 views
0

我在lib文件夾內創建了一個新庫文件sampler.rb。認爲這是無法從rails中的控制器訪問庫文件

module Sampler 
    def sample_tester 
     "test" 
    end 
end 

我已經包括它在application_controller並在config\initializers增加了需要聲明的文件的內容。當我嘗試從我的控制器訪問方法sample_tester時,出現以下錯誤

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

我錯過了什麼嗎?

+0

你需要將它定義爲一個類的方法呢? self.sample_tester? – jstim 2012-01-15 08:53:19

+0

添加初始化程序的代碼和您使用它的控制器的部分。 – phoet 2012-01-15 13:41:34

回答

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

有什麼鏈接可以解釋在rails中如何使用庫文件(/ lib文件夾內的文件)? – Rahul 2012-01-15 13:00:49

+0

它們可以像其他任何ruby文件一樣使用。如果將lib文件夾添加到自動加載路徑,那麼rails會自動在每個請求上重新加載它們。如果你把stuf放在初始化器中,這隻會在初始化時重新加載http://guides.rubyonrails.org/initialization.html – phoet 2012-01-15 13:39:18