В настоящее время я использую приложение Sinatra, которое может иметь разные версии (разные клиенты). Вы можете переключаться между двумя версиями, так как они используют разные переменные сеанса, чтобы определить, в какую систему вы должны войти.Sinatra Несколько моделей/Помощники с таким же именем
Файловая структура для каждой из систем весьма схожа, поэтому некоторые модели и помощники имеют одно и то же имя, но отличаются тем, как они построены - они выполняют ту же функцию, но по-разному (т.е. переменную имена, имена строк).
Должно работать, что при входе в систему у вас должен быть только объем помощников и моделей, которые включены как часть этой системы. Структура файла следующим образом:
- application.rb
- routes
- models
- views
- clients
- system1
- desktop.rb
- routes
- models
- views
- system2
- desktop.rb
- routes
- models
- helpers
- views
The desktop.rb файлы содержат соответствующие маршруты только для этой системы, и файл desktop.rb для каждой системы загружаются только в рамках сессии - изменения сессии, когда изменение системы.
Проблема, возникающая при переключении между системами, синатра помнит места расположения старых моделей и помощников, поскольку они имеют одинаковые имена классов - хотя в качестве части основного файла application.rb мы загружаем только файл desktop.rb это актуально.
Как часть процесса входа, переменная $ path устанавливается так же, как при переключении систем $ path снова устанавливается на новый путь.
$path = session[:systempath]
Главного desktop.rb файл
if session[:systemid]
# Get client/system specific path
require "./#{$path}/desktop.rb" if $path
end
Помощники и модель, то требуются от маршрутов, которые необходимы как часть файла desktop.rb, а затем вызывается из маршрута.
require_relative "../../models/agent/agent.model.rb"
require_relative "../../helpers/agent/agent.helper.rb"
db = DBAgent.new
Проблема затем фиксируется при перезагрузке приложения - есть способ, чтобы предотвратить применение запоминания предыдущих моделей/помощников? Если да, то как это будет сделано?