0

私は現在Sinatraを学習していますが、セッション変数を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]変数が表示されます。「操作」ページを更新すると、前のメッセージがnilに設定されているため、メッセージが表示されないはずです。ただし、「操作が完了しました!」と表示されます。私が「オペレーション」ルートと呼ぶたびに。私は何か間違ったことをしていますか?

読んでくれてありがとう!

4

1 に答える 1

1

ステータスメッセージを設定するには、セッションではなくラックフラッシュを直接使用する必要があります。フラッシュアイテムは、リクエストごとに自動的に削除されます。

コントローラ内:

 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もご覧ください

于 2011-12-16T18:46:12.293 に答える