0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]flash変数を使いこなす秘訣はここにある!

Posted at

flash変数とは?

何かの処理を行った時に、「〜しました」のようなメッセージを表示させることが出来るものです。
これをうまく使いこなすことでユーザーの使いやすいアプリが作れます!

flash変数の基本的な使い方

flashはハッシュのような形式で記述します。キー名は自分の好きな名前をつけることができます。


# flash[:キー名] = "表示させたいメッセージ"

flash[:success] = '写真を投稿しました'

noticeとalertオプション

あらかじめnoticeとalertというオプションが用意されています。


flash[:notice] = 'お知らせが2件あります'  # 通知に使用する

flash[:alert] = 'ログインしてください'      # 警告に使用する

flashメッセージが消えない時は、、

flash.nowというメソッドがあるのでそれを活用すれば良いです。


flash.now[:alert] = 'ログインしてください'

使えるテクニック集

###flash用の部分テンプレートを作る
「flash[:キー名] = "メッセージ"」の部分の「キー名」をmessage_typeで、「メッセージ」をmsgで取得できます。


<% flash.each do |message_type, msg| %>
    <p class="alert alert-<%= message_type %>">
      <%= msg %>
    </p>
<% end %>

###redirect_toを使って短く記述する


# 書き方
if article.save
  redirect_to path, flash: {キー名: "表字させたいメッセージ"}
else
  ~  ~
end

# 例
if article.save
  redirect_to path, flash: {success: "登録が完了しました"}
else
  ~  ~
end

ちなみに、noticeとalertを使う時は非常に簡潔に記述することができます。


# 例
if article.save
  redirect_to root_path, notice: "ログインに成功しました"
else
  ~  ~
end

###renderメソッドを使うときのflash変数の使い方
flashメッセージはアクションが動いた時に表示され、次のアクションが動くと消去される仕組みになっています。
renderメソッドを使うときはアクションを通さないでビューファイルをレンダリングするため、次のアクションが動いた後にflashメッセージが表示されてしまいます。

renderの場合は表示された後、最初のアクションが実行されます。
flashメッセージは2回目のアクションが実行された時に削除されるため、2回flashメッセージが表示されてしまいます。
こういう場合もflash.nowを使用します。


# 例
if article.save
  redirect_to root_path, notice: "登録が完了しました"
else
  flash.now[:alert] = "名前を入力してください"
  render :new
end

###flashメッセージを持ち越す方法
flash.keepを使うと指定されたフラッシュを次のアクションに持ち越すことができます。


#使い方

# 全てのflashメッセージが持ち越される
flash.keep

# 指定したキーのflashメッセージが持ち越される
flash.keep(:キー名)

# 例

private

def flash_keep
  flash.now[:alert] = "名前を入力してください"
  flash.keep(:alert)
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?