一時的に表示したいメッセージがある場合に使う。
: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で出力する。
コメント