2012-01-15 3 views
0

Я создал новый файл библиотеки sampler.rb внутри папки lib. Рассмотрим это как содержимое файлаНевозможно получить доступ к библиотечным файлам из контроллера в 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

+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 в путь автозагрузки, тогда рельсы будут автоматически перезагружать их по каждому запросу. если вы поместите stuf в инициализатор, это будет перезагружено только при инициализации http://guides.rubyonrails.org/initialization.html – phoet

Смежные вопросы