【发布时间】:2014-02-03 22:29:56
【问题描述】:
我目前正在运行一个可以有不同版本(不同客户端)的 Sinatra 应用程序。您可以在两个版本之间切换,因为它们使用不同的会话变量来识别您应该登录的系统。
每个系统的文件结构都非常相似,因此一些模型和助手具有相同的名称,但它们的构建方式不同 - 它们执行相同的功能但方式不同(即变量名称, 行名)。
登录到系统时,您应该只拥有作为该系统一部分包含的助手和模型的范围。文件结构是这样的:
- 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]
主桌面.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
然后在重新加载应用程序时解决此问题 - 有没有办法防止应用程序记住以前的模型/帮助程序?如果是这样,该怎么做?
【问题讨论】:
标签: model routes sinatra haml helper