我有一个经典的西纳特拉应用:红宝石/西纳特拉 - 使用助手*类,还可以消耗西纳特拉设置
module Tds
class Application < Sinatra:: Application
set :persons, []
end
end
我所有的航线被分解成在风格上面的控制器。
我正在使用sinatra-websockets构建一个websockets应用程序,所以我想使用一些自行开发的对象来帮助我管理连接状态。我可能要一个辅助类是这样的:
class Person
attr_accessor: :favorite_color, :name, :etc
end
我想保存我的人在西纳特拉设置阵列:
get '/' do
person = Person.new(init_data)
settings.persons << person
erb :whatev
end
但我想Person类能够访问sinatra设置对象,所以它可以做一些自我维护。也许是这样的:
get '/quit' do
person.delete!
end
这将做到这一点:
class Person
#....
def delete!
settings.persons.delete_if{|p| p == self}
end
end
我敢肯定我的伪代码是非常接近实际的代码,允许有语法问题,或记错关键字。
我一直存在的问题是名称空间问题 - 要么我不明白将帮助类放在哪里(我必须将它们放在模块Tds中并将它们包含在某处?)或者Sinatra不支持类作为帮手?或者我根本不使用帮助器?)
命名空间问题后,我仍然有范围问题。无论我尝试过什么,即使我可以找出命名空间问题(并且我不记得我是如何做的),我的帮助器类也无法访问Settings对象。
我很确定我只是不习惯西纳特拉会议。任何指导给我?
我有点困惑,如何存储使用设置的人员可以工作。也许我有点愚蠢。每个用户如何从中获得相同的价值,除非它存储在Sinatra以外的某个地方? –
建议不要让您的Person类取决于Sinatra。这会让测试变得更加困难,不是吗? IMO依赖注入是你的朋友 - 当然这会让你的问题消失... –