Ruby Sinatra中的全局实例变量

Ruby Sinatra中的全局实例变量,ruby,sinatra,Ruby,Sinatra,我有一个数组,@genres,我通过查询sinatra服务器上的数据库获得。我使用此类型列表填充导航栏中的下拉菜单。我希望此列表可用于我访问的每个页面,并且我还希望该列表每次都更新,以防在页面加载之间向db添加新的流派 显然,我可以添加运行SQL查询的代码,并为每个get、post和delete方法填充@GREEN变量,但这似乎需要大量重复代码。有没有更优雅的方法来创建所有sinatra http方法通用的变量 尝试使用before过滤器: before do @genres ||= Gen

我有一个数组,@genres,我通过查询sinatra服务器上的数据库获得。我使用此类型列表填充导航栏中的下拉菜单。我希望此列表可用于我访问的每个页面,并且我还希望该列表每次都更新,以防在页面加载之间向db添加新的流派


显然,我可以添加运行SQL查询的代码,并为每个get、post和delete方法填充@GREEN变量,但这似乎需要大量重复代码。有没有更优雅的方法来创建所有sinatra http方法通用的变量

尝试使用before过滤器:

before do
  @genres ||= Genre.all # or however you access the array
end
如果要从变量中省略put请求,请为此定义一个条件:

set :method do |method|
  condition do
    method.include? request.request_method.downcase.to_sym
  end
end
然后你可以做一些类似的事情:

before :method => [:get, :post, :delete] do
  @genres ||= Genre.all
end

为什么不花点时间添加一些示例代码,而不是让我们想象所有这些代码?