Использование функции класса из каталога lib в rails - PullRequest
2 голосов
/ 28 октября 2010

Я создаю приложение rails3 и хочу создать класс, который обрабатывает форматирование строк, поэтому я создал класс с именем FormatUtilites.rb в каталоге lib, но всякий раз, когда я пытаюсь вызвать его из другого места в моем приложении, я получаю эту ошибку :

ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::FormatUtilities)

Так что он думает, что это константа, а не метод класса, как он определен. Есть идеи?

class FormatUtilities

  def self.slugify(name)
    name.downcase.gsub(/\s|\W|\D/, "")
  end

end

Спасибо!

Ответы [ 4 ]

4 голосов
/ 28 октября 2010

Оказывается, rails3 прекратит автозагрузку каталога lib. Я понятия не имею, почему они это сделали, но они сделали. Просто нужно добавить его в автозагрузку в приложении. Rb

спасибо в любом случае!

1 голос
/ 10 мая 2011

Вам нужно добавить:

# in config/application.rb
config.autoload_paths = %W(#{config.root}/lib

Имя вашего файла должно быть format_utilities.rb, чтобы автозагрузка работала.

В вашем конкретном случае я бы использовал другой подход. Вместо создания класса со статическими функциями я бы создал модуль под названием FormattingHelper в app / helpers / formatting_helper.rb, например, так

class FormattingHelper
  def slugify(name)
    name.downcase.gsub(/\s|\W|\D/, "")
  end
end

Затем в ApplcationController или в конкретном контроллере я бы добавил:

class ApplicationController < ActionController::Base
  helper :formatting
end
1 голос
/ 28 октября 2010

Классы - это константы в Ruby, кроме того, они также являются классами.Вероятно, вам просто нужно сделать «require format_utilities»

0 голосов
/ 28 октября 2010

Если вы хотите, чтобы rails автоматически загружал этот файл при загрузке, вам нужно будет указать свой файл format_utilities.rb. В следующий раз, когда вы перезапустите свой сервер или консоль, вы сможете выполнить FormatUtilities.slugify("name")

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