Я пытаюсь передать данные между блоками с помощью sinatra. Например:
@data = Hash.new
post "/" do
@data[:test] = params.fetch("test").to_s
redirect "/tmp"
end
get "/tmp" do
puts @data[:test]
end
Однако каждый раз, когда я добираюсь до tmp блока @data, ноль и бросает ошибку. Почему это?
Причина в том, что браузер фактически выполняет два отдельных HTTP-запроса.
Request: POST /
Response: 301 -> Location: /tmp
Request: GET /tmp
Response: ...
Два запроса означают два отдельных процесса, поэтому переменная экземпляра @data очищается после отправки первого ответа. Если вы хотите сохранить информацию, вам нужно использовать файлы cookie или сеансы, в противном случае передать данные в querystring
post "/" do
test = params[:test]
redirect "/tmp?test=#{test}"
end
get "/tmp" do
puts params[:test]
end