无法从rails中的控制器访问库文件

时间:2012-01-15 08:43:19

标签: ruby-on-rails ruby-on-rails-3.1

我在lib文件夹中创建了一个新的库文件sampler.rb。将此视为文件的内容

module Sampler
    def sample_tester
        "test"
    end
end

我已将其包含在application_controller中,并在config\initializers中添加了一个require语句。当我尝试从我的控制器访问方法sample_tester时,我收到以下错误

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

我错过了什么吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您希望将模块方法定义为类方法,则需要使用extend而不是include:

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