Функция автозагрузки из папки lib - PullRequest
1 голос
/ 22 марта 2012

Я добавил опции в application.rb:

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

и lib \ functions.rb:

def some_lib
   return "#######################################"
end

В контроллере я пытаюсь вызвать эту функцию, но получаюошибка:

undefined local variable or method `some_lib' for #<TodosController:0x49a3850>

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Для автоматической загрузки rails из каталога lib необходимо соблюдать правила именования rails.

Библиотека / functions.rb

class Functions
  def self.some_lib
     return "#######################################"
  end
end

Тогда вы можете Functions.some_lib

Или

Библиотека / functions.rb

module Functions
  def some_lib
    return "#######################################"
  end
end

Тогда include Functions, где вам нужны ваши методы. Это позволяет выполнить:

some_lib

0 голосов
/ 22 марта 2012

Да, в принципе, не делайте этого, ruby ​​- это ОО-язык, вы пытаетесь создать процедурный язык.

Есть какой-то способ заставить его делать именно то, что вы просите, включая смешивание новых методов в ядре или объекте ... но на самом деле это не то, что вы хотите делать.

Вы хотите добавить этот новый метод ко всем контроллерам, а не обязательно в другие места?Затем просто добавьте его в свой ApplicationController (./app/controllers/application_controller.rb).Или добавьте его в модуль в ./lib, а затем «включите MyControllerFunctions» в ApplicationController.

Вы действительно хотите использовать его где угодно?Затем я сделал бы то, что предлагает Кайл, сделал его модульным методом и назвал бы его MyFunctions.some_method.

Ruby позволит вам делать что угодно, вы сможете сделать так, чтобы его можно было вызывать так, как вы хотите из любого класса ... но на самом деле, вы не хотитеэто просто приведет к беспорядку.

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