在 Sinatra 中全局创建对象
Create object globally in Sinatra
我看过这个 question,但这仅适用于变量。我想创建一个 class 的对象并在 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
但我想在 post 之外创建对象。可能是这样的:
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。
如何创建一次对象然后全局使用它?
如果你想要一个全局可访问的变量,只需使用 $ 符号:
$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
我看过这个 question,但这仅适用于变量。我想创建一个 class 的对象并在 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
但我想在 post 之外创建对象。可能是这样的:
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。
如何创建一次对象然后全局使用它?
如果你想要一个全局可访问的变量,只需使用 $ 符号:
$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