Как разбить файл модели Rails на несколько файлов (не касается, не модули, а отдельные файлы)? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть Rails 4-модель Foo, определенная в одном файле foo.rb

# app/models/foo.rb
class Foo < ActiveRecord::Base
  def method1
    ...
  end

  def method2
    ...
  end
end

Без какого-либо переопределения классов (например, без рефакторинга для использования признаков или проблем, например), яхотел бы просто переместить часть кода в новый файл, foo_more.rb

# app/models/foo.rb
require File.expand_path('../foo_more.rb', __FILE__)
class Foo < ActiveRecord::Base
  def method1
    ...
  end
end

# app/models/foo_more.rb
class Foo < ActiveRecord::Base
  def method2
    ...
  end
end

Когда я делаю это, используя require, он работает, НО не перезагружается вdev't после внесения изменений в код в этом файле.

Есть ли способ сообщить Rails повторно загрузить этот новый файл в процессе разработки после изменения кода?

1 Ответ

1 голос
/ 09 апреля 2019
require_dependency File.expand_path('../foo_more.rb', __FILE__)
class Foo < ActiveRecord::Base
  def method1
    ...
  end
end

# app/models/foo_more.rb
class Foo < ActiveRecord::Base
  def method2
    ...
  end
end

require_dependency (file_name, message = "Нет такого файла для загрузки -% s")

Интерпретирует файл с использованием механизма и помечает его определенные константы как автозагрузки.имя_файла может быть либо строкой, либо ответом на_путь.

Распространенное использование:

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

Обычно я использую require_dependency при разработке класса или модуля, который находится в моемПриложение rails, возможно в lib / dir.Обычный оператор require не перезагружает мои изменения, поэтому я использую require_dependency в файлах, которые ссылаются на мой недавно разработанный класс или модуль.

Source

Это должно бытьотметил, что ваши мили могут отличаться.Некоторые люди испытывают серьезные замедления при включении новой зависимости.Я полагаю, что это будет перезагружать файл каждый раз, когда вы вызываете Foo.all, Foo.find(1) и т. Д. Итак, вы, вероятно, должны делать это только в процессе разработки.

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