前言:
在創造資料庫後,往往我們要限制輸入資料的格式,以便於資料庫的管理,而在限制此格式時,我們會進行驗證的動作,
意味著提前檢查,像是輸入的類型,如同數字、大小寫,亦或是一定要填入、或是要空出來,甚至是再次的確認,本章介紹我們的驗證種類、同時也讓我們學著如何建立自己的驗證機構,最後是介紹解讀錯誤的訊息,畢竟往往在出錯時,debug佔掉大部分的時間,所以更要清楚驗證錯誤的格式。
一、驗證綜覽
classPerson < ActiveRecord::Base
validates:name, presence:true
end
Person.create(name:"John Doe").valid?# => true
Person.create(name:nil).valid?# => false
意味著,name的欄位得有填值的,否則就不能存進資料庫!
首先,再存入資料庫中,有幾種存入的方式,分別是原生的資料庫的約束(constraint 適用單一資料庫)、用戶端驗證(提供使用者即時反饋)、controller級驗證(聽起來誘人,但使用起來笨重),接著,探討啥狀態時,資料驗證會發生?分別包括create,save,update,但是要小心的是有些動作容易略過驗證,像是decrement,increment,update_all,toggle,save(validate, false)。
另外,談到valid? 與invalid?驗證的地方時,有一個要注意的地方,那就是在new的動作時,儘管有錯誤,也不會說,更不會觸發驗證,這點與save有很大的不同,
舉例:
person.new.errors[:name].any?
person.create.error[:name].any?
二、驗證輔助方法:
2.1validates_associated(不可兩邊都關聯使用,會陷入無限迴圈)
2.2confirmation(像是email要確認兩次),使用方法如下
View模板:
<%=text_field:person,:email%>
<%=text_field:person,:email_confirmation%>
model部分:
classPerson < ActiveRecord::Base
validates:email, confirmation:true
end
2.3:exclusion
這個方法驗證屬性是否“不屬於”某個給定的集合。集合可以是任何Enumerable的物件,與inclusion是相反應用
2.4:length長度的使用方式,使用方式validates:name, length: { minimum:2}
2.5:numerically可驗證輸入的是否單純為數字 {only_integer:true}
2.6presence 與absent作用相反,前者使用為 validate:order,presence: true
2.7uniqueness 屬性是唯一,用法像是 uniqueness:{scope:year,message:”should happen once per year"}
三、通用的輔助方法:
allow_blank 當資料是blank,可以通過驗證
allow_nil 當資料是nil,可以通過驗證
message 假使沒加此項,顯示錯誤時會用預設的錯誤訊息顯示
四、錯誤的驗證顯示
分別有
error
error[:base]
error.size
甚至在view中也得加入error的訊息
這個建立blog時也有出現過!
可以參考,ruby on rails學習筆記前5篇!
總結:
從何要驗證、驗證種類、常用驗證、驗證的錯誤訊息、一系列走下來,其實發現有了驗證後,
可以剩下日後管理的方便,但短時間可能還沒辦法看出成效,儘管如此,還是得養成驗證的好習慣,這樣對自己還是有更長遠的益處。