2012-01-15 34 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