セッションを利用したメッセージ


セッションとは

セッションは、ブラウザごとに情報を短期間保存しておける仕組みです。今回はセッションを利用して次の画面へ移動した時のフラッシュメッセージを実現します。

postして次の画面へデータを送るのはフォームで行いましたが、この方法はもっと長く情報を保持したり、postするのがふさわしくない場合の情報の保持に使われたりします。

動画の流れ

実装をしてみる

  • Sinatraでsessionが使えるようにapp.rbenable: sessionsと記載します。
  • session[:message]"#{name}さんを作成しました"という文字列を代入します。
  • データ保存後はTOP画面にリダイレクトするので、get '/' do end内にメッセージを表示するための処理を記述します。

app.rb

get '/' do
    @now = Time.now
    @contacts = Contact.all
    @message = session.delete :message # session.delete をすればセッションから情報は削除される
    erb :index
end
  • index.erbに@message内の値(メッセージ)を表示する処理を書きます。

index.erb

    <h1>連絡帳</h1>
        <% if @message %>
            <div class="message"><%=@message %></div>
        <% end %>

動作を確認する

  • enable: sessionsでオプションをかえたので再起動が必要になります。
    • bundle exec ruby app.rb -p $PORT -o $IP で再起動してもう一度動作を確認します。
  • 一件情報を作成すると「XXXさんを作成しました」というメッセージが表示されます。
  • リロードした際にメッセージが消えていることを確認します。

メッセージが消えない動作をわざと起こして確認してみる

  • @message のところを下記のように変更します
get '/' do
    @now = Time.now
    @contacts = Contact.all
    # @message = session.delete :message
    @message = session[:message]
    erb :index
end
  • この状態でもう一度動作を確認します。
  • 「XXXさんを作成しました」というメッセージが表示されます。
  • 更新した際にもメッセージが消えないことを確認します。
  • ちゃんと消える動作に戻しておきましょう。
get '/' do
    @now = Time.now
    @contacts = Contact.all
    @message = session.delete :message
    # @message = session[:message] # これだと一回出てたものがずっと消えなくなる
    erb :index
end

検索してみよう

  • 「sessionとは」で検索し、いくつか記事を読みセッションとはどのようなものなのかについて確認しましょう。
  • 「session 仕組み」で検索し、セッションの仕組みについておおまかに把握してみましょう。

今回のコードはこちらで確認することができます。

前の章へ戻る

次の章へ進む


コメントを残す