我可以在 Sinatra (Ruby) 中创建跨路由工作的全局变量吗?
Can I create global variables that work accross routes in Sinatra (Ruby)?
我正在尝试让 ruby class 管理我的应用程序中发生的大部分事情,我打算通过带有嵌入式 Ruby 代码的 erb 来管理它的参数.我想象它是这样的,但它显然不起作用:
require 'sinatra'
require './models/questionaire_manager'
set :bind, '0.0.0.0'
set :port, ENV['PORT']
enable :sessions
set :session_secret, 'SecretString#!$%'
get '/' do
@questionaire=Questionaire_Manager.new 0
erb :index
end
post '/' do
session[:number]=params[:number]
redirect '/quiz'
end
get '/quiz' do
@questionaire.number=session[:number]
@questionaire.genQuestionaire
erb :quiz
end
post '/quiz' do
redirect'/results'
end
get '/results' do
@number=session[:number]
erb :results
end
我想我还应该说我无法掌握会话和会话参数的窍门,而且由于 Sinatra 的页面已经关闭将近一个星期了,我真的无法查看它。
也许试试这样的东西?
require 'sinatra'
require './models/questionaire_manager'
set :bind, '0.0.0.0'
set :port, ENV['PORT']
enable :sessions
set :session_secret, 'SecretString#!$%'
helpers do
def quiz_manager
@questionaire = session[:quiz_manager] ||= Questionaire_Manager.new 0
end
end
get '/' do
# Uncomment the line below if you intend to create a new quiz each time
# session[:quiz_manager] = nil
quiz_manager # Initializes the session variable
erb :index
end
post '/' do
quiz_manager.number = params[:number]
redirect '/quiz'
end
get '/quiz' do
quiz_manager.genQuestionaire
erb :quiz
end
post '/quiz' do
redirect '/results'
end
get '/results' do
@number = quiz_manager.number
erb :results
end
编辑:
为了阐明这是在做什么——我创建了一个名为 quiz_manager 的辅助方法,如果尚未设置它,它会初始化 session[:quiz_manager]
——这将在路由之间持续存在。我还设置了 class 变量 @questionnaire
以便您可以在您的视图中访问它。
我正在尝试让 ruby class 管理我的应用程序中发生的大部分事情,我打算通过带有嵌入式 Ruby 代码的 erb 来管理它的参数.我想象它是这样的,但它显然不起作用:
require 'sinatra'
require './models/questionaire_manager'
set :bind, '0.0.0.0'
set :port, ENV['PORT']
enable :sessions
set :session_secret, 'SecretString#!$%'
get '/' do
@questionaire=Questionaire_Manager.new 0
erb :index
end
post '/' do
session[:number]=params[:number]
redirect '/quiz'
end
get '/quiz' do
@questionaire.number=session[:number]
@questionaire.genQuestionaire
erb :quiz
end
post '/quiz' do
redirect'/results'
end
get '/results' do
@number=session[:number]
erb :results
end
我想我还应该说我无法掌握会话和会话参数的窍门,而且由于 Sinatra 的页面已经关闭将近一个星期了,我真的无法查看它。
也许试试这样的东西?
require 'sinatra'
require './models/questionaire_manager'
set :bind, '0.0.0.0'
set :port, ENV['PORT']
enable :sessions
set :session_secret, 'SecretString#!$%'
helpers do
def quiz_manager
@questionaire = session[:quiz_manager] ||= Questionaire_Manager.new 0
end
end
get '/' do
# Uncomment the line below if you intend to create a new quiz each time
# session[:quiz_manager] = nil
quiz_manager # Initializes the session variable
erb :index
end
post '/' do
quiz_manager.number = params[:number]
redirect '/quiz'
end
get '/quiz' do
quiz_manager.genQuestionaire
erb :quiz
end
post '/quiz' do
redirect '/results'
end
get '/results' do
@number = quiz_manager.number
erb :results
end
编辑:
为了阐明这是在做什么——我创建了一个名为 quiz_manager 的辅助方法,如果尚未设置它,它会初始化 session[:quiz_manager]
——这将在路由之间持续存在。我还设置了 class 变量 @questionnaire
以便您可以在您的视图中访问它。