ruby - 使用 sinatra 在 block 之间传递数据

标签 ruby sinatra

我正在尝试使用 sinatra 在 block 之间传递数据。例如:

@data = Hash.new
post "/" do
   @data[:test] = params.fetch("test").to_s
   redirect "/tmp"
end

get "/tmp" do
   puts @data[:test]
end

但是,每当我到达 tmp block 时,@data 为 nil 并抛出错误。这是为什么?

最佳答案

原因是因为浏览器实际上执行了两个单独的 HTTP 请求。

Request: POST /
Response: 301 -> Location: /tmp
Request: GET /tmp
Response: ...

两个请求意味着两个独立的进程,因此一旦发送了第一个响应,@data 实例变量就会被清除。 如果要保留信息,需要使用cookies或者session,否则将querystring中的数据传递

post "/" do
   test = params[:test]
   redirect "/tmp?test=#{test}"
end

get "/tmp" do
   puts params[:test]
end

关于ruby - 使用 sinatra 在 block 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704772/

相关文章:

ruby - 如何在 ruby​​ 中通过 SSL 调用 HTTP POST 方法?

ruby-on-rails - 什么? ? ruby 的意思

Ruby Sinatra 创建发布请求

ruby - 小马和续集的协会有冲突吗?

ruby - 实现k最近邻需要哪些数据?

ruby-on-rails - 一个月前得到,但总是在一个月的第 15 天

ruby-on-rails - rails 3.2 : Replace null values with empty string from json serialization

Ruby/Sinatra : Passing a URL variable to an . erb 模板

ruby - 如何在 sinatra 应用程序中不包含 layout.haml

ruby - 如何使用 Sinatra 从不同的目录渲染模板和布局