我目前正在運行一個可以有不同版本(不同客戶端)的Sinatra應用程序。您可以在兩個版本之間切換,因爲它們使用不同的會話變量來確定您應該登錄哪個系統。Sinatra Multiple Models/Helpers同名
每個系統的文件結構非常相似,所以一些模型和幫助程序具有相同的名稱,但它們的構建方式不同 - 它們執行的功能相同但方式不同(即變量名字,行名)。
它應該在登錄到系統時工作,您應該只有作爲該系統一部分的助手和模型的範圍。文件結構是像這樣:
- application.rb
- routes
- models
- views
- clients
- system1
- desktop.rb
- routes
- models
- views
- system2
- desktop.rb
- routes
- models
- helpers
- views
的desktop.rb文件包含有關路線只有該系統,並且每個系統的desktop.rb文件只裝載作爲會話的一部分 - 會話更改時改變系統。
在系統之間切換時發生的問題,sinatra會記住舊模型和幫助程序的位置,因爲它們具有相同的類名 - 即使作爲主要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
當重新加載應用程序時,問題是固定的 - 是否有辦法阻止應用程序記住以前的模型/幫助程序?如果是這樣怎麼辦?