У меня есть приложение Rails 3, которое определяет некоторые классы, как обычно. Я пытаюсь выяснить, как повторно открыть один из этих классов внутри плагина (сгенерированный «rails generate plugin ...»), и иметь оба файла (файл в самом приложении и файл в плагине) автоматически перезагружайте каждый запрос в режиме разработки.Повторно открыть загруженный класс из плагина Rails 3?
Простой пример был бы:
# root/lib/person.rb
class Person
Core = 1
end
# root/vendor/plugins/plugin1/lib/person.rb
class Person
Plugin = 2
end
# root/app/views/home/index.html.erb
<%= Person::Core %> ... <%= Person::Plugin %>
Когда эта точка зрения оказывается, я получаю ошибку, что велосипед :: Plugin является неинициализированным. Я добавил и root/lib, и root/vendor/plugins/plugin1/lib в мои autoload_paths (в идеале плагин добавил бы это в свой init.rb или где-то подобное, но по одной штуке за раз).
Как это сделать? autoload_at выглядит так, как будто это может помочь, если я могу сказать, что он автоматически загружает класс Person из обоих мест, но мне не повезло (я совершенно новичок в этом, так что я могу передавать неправильные аргументы и т. д.). В конце я хочу сделать это с классами, определенными в стандартных местах (в частности, в моделях), а не только с lib.
Спасибо за идею. Кажется, он не работает для меня, я думаю, потому что root/lib/person.rb определяет класс Person и загружается автоматически. vendor/plugins/plugin1/lib/person.rb вообще не загружается. –
У вас есть файл 'vendor/plugins/plugin1/plugin1.rb', который содержит строку, такую как' require 'person? ', Я думаю, что плагины загружаются через файлы, соответствующие' vendor/plugins/*. Rb' so для многофайлового плагина у вас обычно есть один файл rb в базе, который требует всех остальных, которые находятся в директории и т. д. – Jeremy
Да, но если мне нужен поставщик/плагины/plugin1/lib/person.rb из этого файла, определяется в person.rb только для первого запроса. Я думаю, что это происходит из-за того, что приложение/lib/person.rb загружается автоматически, что устраняет и переопределяет константу Person для каждого нового запроса, а затем person.rb в плагине не загружается снова. –