У меня есть модель Foo для Rails 4, определенная в одном файле 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
Когда я делаю это, используя требование, он работает, НО не перезагружается в dev't после изменений кода в этом файле.
Есть ли способ сказать Rails повторно загрузить этот новый файл в процессе разработки после изменения кода?
Это не приглашение для обзора кода, @jvillian, мой вопрос четко и лаконично излагает, что я хочу сделать. И сделали, хотя и не с возможностью автоматической перезагрузки после изменения кода, как я бы предпочел.
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 = "No such file to load -- %s")
Interprets a file using mechanism and marks its defined constants as autoloaded. file_name can be either a string or respond to to_path.
Common Usage:
Use this method in code that absolutely needs a certain constant to be defined at that point. A typical use case is to make constant name resolution deterministic for constants with the same relative name in different namespaces whose evaluation would depend on load order otherwise.
I typically use require_dependency when developing a class or module that resides in my rails app, perhaps in the lib/ dir. A normal require statement does not reload my changes, so I use require_dependency in files that reference my newly developed class or module.
Следует отметить, что ваши мили могут отличаться. Некоторые люди испытывают серьезные замедления при включении новой зависимости. Я считаю, что это будет перезагружать файл каждый раз, когда вы вызываете Foo.all
, Foo.find(1)
и т. д. Так что, вероятно, вам следует делать это только в процессе разработки.
Большое спасибо за подробный ответ. Кстати, отличное имя пользователя! Мой любимый тупой сериал, жаль, что их мало!
Причиной является временная песочница. Я хочу передать несколько десятков методов другому разработчику для проверки и рефакторинга, чтобы они не копались в исходном файле основной модели одновременно с другим разработчиком, добавляющим новую (но не связанную) функциональность.