Передача данных между блоками с помощью sinatra - PullRequest
9 голосов
/ 24 апреля 2010

Я пытаюсь передать данные между блоками, используя 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 равен nil и выдает ошибку. Это почему?

1 Ответ

15 голосов
/ 24 апреля 2010

Причина в том, что браузер фактически выполняет два отдельных HTTP-запроса.

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

Два запроса означают два отдельных процесса, поэтому переменная экземпляра @data очищается после отправки первого ответа. Если вы хотите сохранить информацию, вам необходимо использовать файлы cookie или сеансы, иначе передайте данные в строку запроса

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

get "/tmp" do
   puts params[:test]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...