Невозможно получить доступ к файлам библиотеки из контроллера в рельсах - PullRequest
0 голосов
/ 15 января 2012

Я создал новый файл библиотеки sampler.rb внутри папки lib. Считайте это содержимым файла

module Sampler
    def sample_tester
        "test"
    end
end

Я включил его в application_controller и добавил оператор require в config\initializers. Когда я пытаюсь получить доступ к методу sample_tester с моих контроллеров, я получаю следующую ошибку

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

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 15 января 2012

если вы хотите, чтобы ваш метод модуля был определен как метод класса, вам нужно использовать exte вместо 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
1 голос
/ 15 января 2012

Поскольку не похоже, что вы создаете экземпляр этого, я считаю, что вам нужно определить его как метод класса, чтобы его можно было вызывать так: 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

Второй способ лучше, если вы хотите определить несколько методов класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...