【问题标题】:Create object globally in Sinatra在 Sinatra 中全局创建对象
【发布时间】:2015-09-14 00:28:08
【问题描述】:

我看过这个question,但这仅适用于变量。我想创建一个类的对象并在 Sinatra 中全局使用它

我正在做类似以下的事情并且工作正常:

require 'sinatra'
require 'MyClass'

set :port, 8080
set :static, true

get '/' do
  erb :myform, :locals => {'value' => "Give a value."}
end

post '/hello/' do
  param_1 = params[:param_1]
  param_2 = params[:param_2]

  @obj = MyClass.new
  value = @obj.run(param_1, param_2)

  erb :myform, :locals => {'value' => value}
end

但我想在帖子之外创建对象。可能是这样的:

require 'sinatra'
require 'MyClass'

set :port, 8080
set :static, true

@obj = MyClass.new

get '/' do
  erb :myform, :locals => {'value' => "Give a value."}
end

post '/hello/' do
  param_1 = params[:param_1]
  param_2 = params[:param_2]

  value = @obj.run(param_1, param_2)

  erb :myform, :locals => {'value' => value}
end

但是,后者不起作用,因为我在值中得到 null。

如何创建一次对象,然后全局使用它?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    如果您想要一个全局可访问的变量,只需使用 $ 表示法:

    $myobj = MyObject.new
    ... more code
    $myobj.some_method
    

    然而,一个稍微更优雅的解决方案可能是这样的:

    require 'sinatra/base'
    
    class MyApp < Sinatra::Base
      set :sessions, true
      set :my_obj, MyObject.new
    
      get '/' do
        # call settings.my_obj
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2015-03-22
      • 1970-01-01
      相关资源
      最近更新 更多