LoginSignup
10
8

More than 5 years have passed since last update.

rails flashメッセージのコーディングをスッキリ

Posted at

今まで、フラッシュメッセージのコーディングをうまく書けなくて悩んでいたところ、スッキリ分かりやすいやり方を学んだのでまとめました。

flashメッセージってなに?

ログインした時にログインしましたと表示されたり、記事を投稿したときに記事を投稿しましたと表示されるメッセージのこと

flashってなに?

簡単なメッセージを画面に表示するためのメソッド
flashは、ハッシュのように使用することができる。
あるキーに対する値としてメッセージを設定する、仕組みとなっている。
設定されたメッセージは、sessionに保管される。
一度表示されるまではsession内に残っており、一度表示されると自動的に削除される。

使い方

コントローラー側でflashメッセージを指定し、view側でメッセージを表示する。

(例)新たなblogを投稿し、「ブログを投稿しました」というメッセージを表示したい場合

blogs_controller.rb
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以外にも独自のキーを設定るすことも可能

index.html.haml
- 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は、タグを自動で生成してくれるメソッド(詳細は省略)

ja.yml
  省略
  flash:
   blogs:
    create: ブログを投稿しました

設定するメッセージは、tメソッドを使用してi18nの仕組みを利用している(ここも省略。書くと長くなるので。。)

まとめ

  • メッセージの設定にtメソッドを使用すること
  • Bootstrapを適用するためのviewのコーディング方法
    この二つのやり方を学べたのは大きかった。
10
8
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
10
8