ActiveRecord資料驗證(Validation)
我們可以利用ActiveRecord資料驗證(Validation)來幫我們檢查資料的正確性,如果驗證失敗,那筆資料就無法存進資料庫。
編輯app/models/guest.rb加入
class Guest < ActiveRecord::Base
validates_presence_of :title
end
validates_presence_of這行程式宣告了title這個屬性是必填,當呼叫guest.save時,就會檢查這個欄位有沒有填,沒有填就會回傳一個false。
驗證失敗後,提示錯誤訊息
如果我們能夠在驗證失敗後,提示使用者“儲存失敗”,並讓使用者有機會可以修改再送出的話,可以這麼做:
修改guests_controller.rb的create及update action
def create
@guest = Guest.new(guests_params)
if @guest.save
redirect_to :action => :index
else
render :action => :new
end
end
// 如果@guest.save回傳的是true,則轉頁到index; 反之,則回傳new action的樣板
*這邊render :action => "new" 是回傳new action的樣板而不是執行new action
def update
if @guest.update_attributes(guests_params)
redirect_to :action => :show, :id => @guest
else
render :action => :edit
end
end
// 更新也是一樣,如果@guest.update_attributes(guests_params)有回傳true則轉頁,沒有則吐edit action目前的樣板回來。
接著編輯_form.html.erb 加入這段程式碼,讓頁面可以顯示錯誤訊息
<% if @guest.errors.any? %>
<ul>
<% @guest.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>