В Rails нельзя добавлять новые методы в Array :: Class в среде разработки (работает в среде тестирования) - PullRequest
1 голос
/ 29 февраля 2012

В моем приложении Rails, в app / models / , у меня есть файл с именем array.rb , который содержит следующий код:

class Array
  def sum_f
    #my code
  end
end

КогдаЯ запускаю консоль, Array.new.respond_to? (: Sum_f) возвращает false , тогда как тестовая консоль возвращает true (иметод работает хорошо).

Я понял, что установка config.cache_classes в true в development.rb исправляет это, но я думаю,в том, что это не правильное решение.

Есть идеи, почему мои модификации класса Array игнорируются при разработке ENV?

Cheers

1 Ответ

1 голос
/ 29 февраля 2012

Rails, в разработке, лениво загружает файлы.Это означает, что если вы явно не требуете этого, файл не будет загружен, пока вам не потребуется его класс.

Что я делаю, я создаю инициализатор, например config/initializers/core_ext.rb
, который включает все основные расширения моего приложения.

Dir[Rails.root.join('lib', 'core_ext', '**', '*.rb)].each {|f| require f}

Затем добавьте все свои основные расширения в каталог lib/core_ext (например, lib/core_ext/array для вашего примера), и они будут автоматически загружены при запуске приложения.
Это такжеозначает, что каждый раз, когда вы меняете файл расширения ядра, вам необходимо перезапускать сервер rails.

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