在Controller中,Rails提供了一個方便的功能叫做Flash,可以讓我們向user顯示一些確認/錯誤訊息。
Flash是一個暫時的Hash,顯示一次後就會被清掉,是一個很方便的方法。
在users controller裡,其實我們已經用過了Flash:
if @user.save
redirect_to @user, notice: "Register Success!"
notice: "Register Success!" 這一行就是一個Flash訊息。
:notice現在是Flash這個Hash的一個key,而value是“Register Success!"
它的結構如下:
Controller的 flash[:notice] = "Register Success!"
Hash Key Value
只是Flash訊息不會自動顯示,我們必須要把它加入到主模板(layout)中,才可以讓每一個頁面都可以顯示Flash訊息。
編輯app/views/layouts/application.html.erb的body區塊
加入
<% flash.each.do |key, value| %>
<div class="alert alert-<%= key%>">
<%= value %>
</div>
<% end %>
<%= yield %>
其中
<div class="alert alert-<%= key%>">
<%= value %>
</div>
將會輸出成
<div class="alert alert-notice>Register Success!</div>
現在回到new頁面註冊一個新的user,應該就可以看到正確的Flash訊息了。
最後,我們可以稍微修改一下controller,讓這個flash訊息更客製化。
編輯users_controller.rb
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "Welcome, #{@user.name}"
redirect_to @user
else
render action: 'new'
end
end