flashメッセージ(rails)

一時的に表示したいメッセージがある場合に使う。
:notice :alert :flashの3つが使える。

Action Controller の概要 - Railsガイド
本ガイドでは、コントローラの動作と、アプリケーションのリクエストサイクルでコントローラがどのように使われるかについて説明します。セッション、フィルタ、cookie、データストリーミング、リクエストによって発生する例外、その他多くの話題を取り扱っています。

以下のように使う。

  def create
    @group = Group.new(create_params)
    if @group.save
      redirect_to controller: :messages, action: :index
      flash[:notice] = 'グループを作成しました'
    else
      flash[:alert] = 'グループ名を入力してください'
      render :new
    end

redirect_toには直接引き渡すこともできる。

redirect_to :root, notice: "グループ作成"

flashの寿命

flash[:hoge]という使い方だと、表示する該当ページとその次のページでも出力される。つまり次のアクションまでがメッセージの寿命。
1回だけ表示にする場合にはflash.nowとする。
逆に表示し続けたい場合にはflash.keepとする。

devise

deviseでは標準でflashメッセージ機能が付いている。
devise経由の場合はデフォルトが英語メッセージとなっているため、以下の通り日本語化する。

日本語化

下記のサイトから日本語ファイルをダウンロードしてconfig/locales以下に配置
– devise.ja.yml
– ja.yml

config/application.rbに以下を追記

module Project名
  class Application < Rails::Application
    #〜省略〜
    config.i18n.default_locale = :ja
  end
end

フラッシュメッセージを表示する。(devise利用時)

hamlだと以下のように書く。

.notification
  - flash.each do |key, value|
    = content_tag :div, value, class: key

flashの内容がnotificationとalertのハッシュのため、eachで出力する。

コメント