現在我們嘗試輸入錯誤的驗證密碼,或是一個錯誤格式的email。
發現系統沒有框出錯誤訊息,且卡在註冊頁面上。
我們在controller這裡加了一個邏輯: if @user.save else render action "new"
如果儲存失敗,就會再開啟new頁面。
其實網頁上已經有錯誤訊息,只是我們沒有將它顯示出來。
可以看一下這時候的網頁原始碼,會發現有下面這個div:
<div class="field_with_errors">,代表確實有出錯,但沒有解釋發生什麼錯誤。
我們可以利用console執行,就可以直接看到錯誤在哪:
可以看到User並沒有儲存成功,且當錯誤發生時,
ActiveRecord會自動幫我們把錯誤儲存在@user.errors裡面。
所以我們的責任就只要把它們輸出給使用者看就可以了。
編輯views/users/new.html.erb加入:
<% if @user.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
There are <%= pluralize @user.errors.count, "error" %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
這樣就可以成功印出錯誤訊息了。