Rubyonrails でフラッシュ機能を利用してみよう!

 

こんにちは。本当に久々の更新になります。

これからは学習したことの定着という意味も含めて、

プログラミングに関する記事をどんどん書いていこうと思います。

参考にしていただければ幸いです。

 

さて、最近フラッシュという機能を学びました。

例えば、データを登録したり更新したりした後に、遷移先のビューで

「〜の登録に成功しました!」

「〜の更新に成功しました!」

のように表示させたいケースがあると思います。

 

でも、このメッセージが表示されるのは一度だけにしたいですよね。

そんな時に使えるフラッシュという機能がrailsでは提供されています。

フラッシュでは、現在のリクエストと次のリクエストでのみ、データが維持されます。

 

 

redirect_toメソッドのnoticeオプション

 

フラッシュは、redirect_toメソッドと合わせて利用されることが多いです。

redirect_toメソッドには、noticeオプションがあり、

ここで設定された文字列は遷移先にフラッシュとして送られます。

 

仮に下記のようなcreateアクションがあるとします。

 

def  create

@post = Post.new(content: params[:content])

if @post.save

redirect_to root_path, notice: "投稿できました!"

else

render 'top/posting'

end

end

 

@post.saveで@postの内容がデータベースに保存できた場合、rootにリダイレクトします。

(保存できなかった場合は、top/postingに戻りますが今回の内容とは無関係です。)

noticeオプションをつけているので、リダイレクト先にこの情報も送られます。

リダイレクト先のビューファイルに、下記のように記述することで、

noticeオプションに書いた内容を表示することができます。

 

<%= notice %>

 

この場合は、「投稿できました!」と表示されます。

ちなみに、noticeオプションの他にalertオプションもあるのですが、

特に動作に違いはないように思います。

表示する文章の内容によって、noticeとalertを使い分けるとよいかと思います。

 

 

flashメソッドを使用する

 

先程は redirect_toメソッドのオプションとしてフラッシュを使用しましたが、

flashメソッドを使用する方法もあります。その場合の記法は下記のようになります。

(先程と同様、createアクションで説明します。)

 

def  create

@post = Post.new(content: params[:content])

if @post.save

flash[:notice] = "投稿できました!"
redirect_to root_path

else

render 'top/posting'

end

end

 

ここで書いたflash[:notice]の内容が、遷移先のビューファイルで使用できます。

キー([]の中身) には任意の名前を指定できます。

flash[:alert]とかflash[:oshirase]とか何でもOKです。

遷移先には下記のように書きましょう。

 

<%= flash[:notice] %>

 

キーの名前を:notice以外にした場合は、その名前に合わせてください。

 

 

以上です。

フラッシュで表示された内容は、ページから移動したり、

ページを更新したりすると消えてしまいます。便利な機能ですね。

 

 

 

参考にさせていただいたサイト

 

flashを使って簡易メッセージを表示する

 

 

記事が気に入ったらシェア!

コメントを残す