今まで、フラッシュメッセージのコーディングをうまく書けなくて悩んでいたところ、スッキリ分かりやすいやり方を学んだのでまとめました。
flashメッセージってなに?
ログインした時にログインしました
と表示されたり、記事を投稿したときに記事を投稿しました
と表示されるメッセージのこと
flashってなに?
簡単なメッセージを画面に表示するためのメソッド
flash
は、ハッシュのように使用することができる。
あるキーに対する値としてメッセージを設定する
、仕組みとなっている。
設定されたメッセージは、session
に保管される。
一度表示されるまではsession内に残っており、一度表示されると自動的に削除
される。
使い方
コントローラー側でflashメッセージを指定し、view側でメッセージを表示する。
(例)新たなblogを投稿し、「ブログを投稿しました」というメッセージを表示したい場合
def create
@blog = Blog.new(blogs_params)
if @blog.save
redirect_to blogs_path, notice: t('flash.blogs.create')
else
render 'new'
end
redirect_toメソッドは、次のような使い方ができる。
redirect_to(リダイレクト先のURL [, :status => ステイタスコード, オプション])
ここのオプション
に、notice:
やalert:
を設定すると、flash[:notice]
,flash[:alert]
と同様の記述となる。
(注)notice、alert以外にも独自のキーを設定るすことも可能
- flash.each do |key,value|
- key = "info" if key == "notice"
- key = "danger" if key == "alert"
= content_tag :div, value, class: "alert alert-#{key}"
bootstrapを使用したデザインにするため、上のような記述としている。
設定されたキーの値でデザインを変えるため、変数keyにそれぞれbootstrap用のclassの一部を代入し渡している。
content_tag
は、タグを自動で生成してくれるメソッド(詳細は省略)
省略
flash:
blogs:
create: ブログを投稿しました
設定するメッセージは、tメソッドを使用してi18nの仕組みを利用している(ここも省略。書くと長くなるので。。)
まとめ
- メッセージの設定にtメソッドを使用すること
- Bootstrapを適用するためのviewのコーディング方法
この二つのやり方を学べたのは大きかった。