Ruby/Sinatra-使用还可以使用Sinatra设置的Helper*类

Ruby/Sinatra-使用还可以使用Sinatra设置的Helper*类,ruby,sinatra,sinatra-activerecord,Ruby,Sinatra,Sinatra Activerecord,我有一个经典的Sinatra应用程序: module Tds class Application < Sinatra:: Application set :persons, [] end end 我想将我的人员存储在Sinatra设置数组中: get '/' do person = Person.new(init_data) settings.persons << person erb :whatev end 哪种方法可以做到这一点: clas

我有一个经典的Sinatra应用程序:

module Tds
  class Application < Sinatra:: Application
    set :persons, []
  end
end 
我想将我的人员存储在Sinatra设置数组中:

get '/' do
  person = Person.new(init_data)
  settings.persons << person
  erb :whatev
end
哪种方法可以做到这一点:

class Person
  #....
  def delete!
   settings.persons.delete_if{|p| p == self}
  end
end
我很确定我的psuedocode非常接近实际代码,给出或接受语法问题或错误记住关键字

我一直存在的问题是名称空间问题——要么我不知道将助手类放在哪里(我是否必须将它们放在模块Tds中并将它们包含在某个地方?),要么Sinatra不支持类作为助手?或者我根本不使用助手?)

在名称空间问题之后,我仍然存在范围问题。无论我做了什么尝试,即使我能够解决名称空间问题(我不记得我是怎么做的),我的助手类也无法访问Settings对象


我很确定我只是不习惯西纳特拉会议。有什么给我的指导吗?

我不知道以前这样使用过设置数组。该
设置
数组是否作为Sinatra的一部分存在?你能像这样把东西放进去吗


我想如果这是可能的话,那就足够公平了,但可能会有一些限制。获取持久性的一般做法是使用
会话
散列。这限制在几千字节以内,因此如果不够大,请设置一个数据库。

看到这样保存这些片段的地方有点让人困惑。 我们需要查看整个代码,以准确指出错误所在。 您知道主文件/类中需要helpers.rb文件吗? 也包括在内,因为它是一个模块? 将类放在模块内部或外部会在范围上产生差异

如果你能发布整个代码,我们可以提供更多的帮助,如果不能,这里有一些一般性的建议

Sinatra中的设置对象是您在主类/启动文件中配置的对象。 通过做

或者只是

set :port, 8002
set :bind, '0.0.0.0'
...
在助手文件中,您可以在相同的Sinatra应用程序命名空间中访问这些设置,如下所示

settings.files

对于如何使用设置存储人员,我有点困惑。也许我有点傻。除非它存储在Sinatra之外的某个地方,否则每个用户如何从中获得相同的值?建议不要让您的Person类依赖于Sinatra。这将使测试更加困难,不是吗?IMO依赖注入是您在这里的朋友--当然这会让您的问题消失。。。
configure do
  enable :run
  set :port, 8003
  ...
  set :public_folder, File.join(File.dirname(__FILE__), 'public')
  set :files, File.join(settings.public_folder, 'files')
end
set :port, 8002
set :bind, '0.0.0.0'
...
settings.files