2011-12-16 22 views
0

私は現在Sinatraを学んでいますが、セッション変数をnilに設定できないようです...私は何時間も探しています。動作しません。奇妙なことは、私のマシン上ではローカルで動作することですが、Herokuでは動作しません。要するに、私のコードは次のようになります。私は、「送信-oprationを」ルート呼び出す場合Sinatra on Heroku:セッション変数をnilに設定できません

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 

だから、それは「操作」ルートに私をリダイレクトし、それがセッションの表示[:メッセージ]変数を。 「操作」ページをリフレッシュすると、前のメッセージがnilに設定されているので、メッセージはありません。しかし、それでも "Operation completed!"と表示されます。私が「操作」ルートを呼び出すたびに。私は何か間違っているのですか?

読んでいただきありがとうございます!

答えて

1

状況メッセージを設定するために、セッションの代わりにrack-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] 

役に立てば幸い!

EDIT:

またsinatra-redirect-with-flash

+0

ああを見てみましょう、申し訳ありません...私は実際に質問に答えませんでした。 session [:message] =メッセージを出力した後にnilが呼び出されています。したがって、実際にはその声明には決して到達しません。 – SeanNieuwoudt