#プログラミングの勉強日記
2020年8月14日 Progate Lv.226
#flashとは
ページ上に一度だけ表示されるメッセージのこと。ユーザに対してページを移動したときに簡単なメッセージを表示させることができる。ユーザの登録完了などのサクセスメッセージや、投稿などの操作が失敗したときのエラーメッセージなどを表示するときに使う。
#flashの書き方
flashはハッシュのような形で記述する。
flash[:キー名]="表示したいメッセージ"
キー名は好きな名前を付けることができる。
フラッシュメッセージを表示したい箇所には以下のように記述する。
<%= flash[:キー名] %>
##scaffoldで自動的に作成した場合
def update
respond_to do |format|
if @post.update(post_params)
format.html { redirect_to ("/posts"), notice: 'Post was successfully updated.' }
format.json { render :show, status: :ok, location: @post }
else
format.html { render :edit }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
<p id="notice"><%= notice %></p>
##自分で作成した場合
def login
@user = User.find_by(email: params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = @user.id
redirect_to("/users/index")
else
flash[:alert] = "メールアドレスまたはパスワードが間違っています"
@email = params[:email]
@password = params[:password]
render("users/login_new")
end
end
<p id="alert"><%= alert %></p>
#noticeとalertオプション
キーには好きな名前を付けることができるが、notice
とalert
はオプションがある。これらは<%= flash[:キー名] %>
と書く必要がなく、以下のようにflashを省略して書くことができる。
<%= notice %>
<%= alert %>
noticeは通知に、alertは警告に使うことが望ましい。
#redirect_toと合わせて使うときの書き方
redirect_to
でnoticeとalertを使うときはまとめて書くことができる。scaffold時のように以下のように書ける。
redirect_to ("パス"), notice: '表示するメッセージ'
他のキー名でもまとめて書くことができ、その場合は以下のようになる。
redirect_to ("パス"), flash{キー名: '表示するメッセージ' }
redirect_toはアクションが実行されてからビューが表示される。