如何在不使用Sinatra中的会话或haml的情况下在路由之间传递变量?

时间:2014-11-26 18:13:20

标签: ruby sinatra session-variables erb

例如:当您想要将错误消息返回到另一个页面时

当前我这样做

  get '/' do
    erb :home
  end


  get '/send/:user' do
    Process.detach(fork{ exec "ruby send.rb #{params[:user]} > output.txt"})   
    session['msg'] = "Process for the user #{params[:user]} iniciated, it will take a few minutes"
    redirect '/'
  end

并在.erb

中显示如下信息
<span style="margin:auto; text-align: center; padding:10px"><%=session['msg']%></span>

使用会话变量

是一种更好的方法

使用:

  • ruby​​ 2.1.2p95(2014-05-08修订版45877)[x86_64-darwin13.0]
  • sinatra(1.4.5)

1 个答案:

答案 0 :(得分:1)

你应该真正使用Sinatra Flash来获得你所追求的机制。 Flash消息通常会在一个请求后过期,因此您不需要手动管理它们(它们会在后台使用会话进行存储):

require 'sinatra'
require 'sinatra/flash'

enable :sessions

get '/' do
   erb :home
end

get '/send/:user' do
    Process.detach(fork{ exec "ruby send.rb #{params[:user]} > output.txt"})   
    flash[:msg] = "Process for the user #{params[:user]} initiated, it will take a few minutes"
    redirect '/'
end

在home.erb:

<span style="margin:auto; text-align: center; padding:10px"><%= flash[:msg] %></span>