The flash
註冊表單現在已經可以使用了。現在要增加一個歡迎訊息,如果連到其他頁面,或重整頁面,這個訊息必須消失。
Rails 提供一個 flash 方法用來顯示短暫的訊息,可以把它當作是一個 hash。Rails 會使用慣例的 :success key,表示執行成功時,會帶出你要的訊息:
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
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
現在要走訪 flash,把相關訊息撈出來顯示在頁面上:
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>
其中:
alert-<%= message_type %>
是為各種訊息指定 CSS class,所以 :success 的訊息的 CSS class 就會是:
alert-success
:success key 是一個 symbol,ERb 會自動把它轉成字串 "success",然後再置入到 view 裡面。為不同的訊息類別指定 CSS class,可以各自幫這些訊息定義樣式。Bootsrap 提供四種樣式:success、info、warning、danger。
然後:
flash[:success] = "Welcome to the Sample App!"
輸出成 HTML 就會長這樣:
<div class="alert alert-success">Welcome to the Sample App!</div>
完整的程式碼如下:
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
.
.
.
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
.
.
.
</body>
</html>