Синатра на Heroku: не может установить переменную сеанса на ноль - PullRequest
0 голосов
/ 16 декабря 2011

В настоящее время я изучаю Синатру, и я не могу установить переменную сеанса равной nil ... Я искал часы, и она просто не работает.Странно то, что он работает локально на моей машине, но не работает на Heroku.Короче говоря, мой код выглядит следующим образом:

configure :production do
    enable :sessions
    set :session_secret, ENV['SESSION_KEY'] || 'whatever'
end

post '/send-operation/?' do
    session[:message] = 'Operation completed!'
    redirect '/operation/'
end

get '/operation/?' do
    if(session[:message])
        "The message is: #{session[:message]}."  
        session[:message] = nil
    end 
end

Поэтому, если я вызываю маршрут «send-opration», он перенаправляет меня на маршрут «operation» и отображает переменную session [: message].Если я обновлю страницу «операция», не должно быть никаких сообщений, так как предыдущее сообщение было установлено на ноль.Но все равно отображается «Операция завершена!»каждый раз, когда я называю «операция» маршрут.Я что-то не так делаю?

спасибо за чтение!

1 Ответ

1 голос
/ 16 декабря 2011

Вы должны использовать rack-flash вместо сеанса непосредственно для установки сообщений о состоянии. Элемент flash будет автоматически удаляться после каждого запроса.

В вашем контроллере:

 flash[:error] = <your message>

Я использую HAML для своих шаблонов, вот как это выглядит:

- if !flash[:error].blank? then 
    %p{ :class => "error" }= flash[:error]              
- if !flash[:notice].blank? then 
    %p{ :class => "notice" }= flash[:notice]

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ:

Также взгляните на sinatra-redirect-with-flash

...