###flash
ユーザー登録フォームが実際に動くようになった。
それにより登録することができるよになった。
登録完了後に表示されるメッセージを二度目以降に表示させないようにさせる。
それを使うには
flash
という変数を使う。 ハッシュのように使う。
####ユーザー登録ページにフラッシュメッセージを追加する
app/controllers/users_controller.rb
class UsersController < ApplicationController
.
.
.
def create
@user = User.new(user_params)
# 外部メソッドを使う
if @user.save
# 保存の成功をここで扱う。
flash[:success] = "Welcome to the Sample App!"
# 成功時一度だけ表示されるメッセージ
redirect_to @user
# urlを指定して表示する
# 保存成功したらurlを表示する
else
render 'new'
# 保存に成功しなければnewアクションに移動する
# 失敗したらまた戻る
end
end
private
#外部から使えないようにする
def user_params
# Usersコントローラの内部でのみ実行される
# Web経由で外部ユーザーにさらされない
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
>> flash = {success: "It worked!", dager: "It failed." }
# ハッシュを作った。
=> {:success=>"It worked!", :dager=>"It failed."}
>> flash.each do |key, value|
# each文を作成 繰り返し
?> puts "#{key}"
>> puts "#{value}"
>> end
success
It worked!
dager
It failed.
:successキーのメッセージが表示される場合、適用されるCSSクラスは次のようになります。
alert-success
####flash変数の内容をWebサイトのレイアウトに追加する
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= render 'layouts/rails_default' %>
<%= render 'layouts/shim' %>
</head>
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<!--これがデータ送信成功時メッセージのためのHTML-->
<!--message_typeにsuccess代入, message 成功時メッセージに代入-->
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
<!--デバッグ情報はRailsの3つのデフォルト環境のうち、開発環境(development)だけで表示されるようになります-->
</div>
</body>
</html>
###演習
1.コンソールに移り、文字列内の式展開(4.2.1)でシンボルを呼び出してみましょう。例えば"#{:success}"といったコードを実行すると、どんな値が返ってきますか? 確認してみてください。
>> "#{:success}"
=> "success"
2.先ほどの演習で試した結果を参考に、リスト 7.28のflashはどのような結果になるか考えてみてください。
>> flash
=> {:success=>"It worked!", :dager=>"It failed."}
#ハッシュのキーとバリュー
>> "#{flash[:success]}"
#ハッシュのキーでバリューを呼び出す
=> "It worked!"
>> "#{flash[:dager]}"
=> "It failed."