美文网首页
[065]Ruby on rails筆記-Active Reco

[065]Ruby on rails筆記-Active Reco

作者: 小慷 | 来源:发表于2016-08-10 21:51 被阅读33次

前言:

在創造資料庫後,往往我們要限制輸入資料的格式,以便於資料庫的管理,而在限制此格式時,我們會進行驗證的動作,

意味著提前檢查,像是輸入的類型,如同數字、大小寫,亦或是一定要填入、或是要空出來,甚至是再次的確認,本章介紹我們的驗證種類、同時也讓我們學著如何建立自己的驗證機構,最後是介紹解讀錯誤的訊息,畢竟往往在出錯時,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篇!


總結:

從何要驗證、驗證種類、常用驗證、驗證的錯誤訊息、一系列走下來,其實發現有了驗證後,

可以剩下日後管理的方便,但短時間可能還沒辦法看出成效,儘管如此,還是得養成驗證的好習慣,這樣對自己還是有更長遠的益處。

相关文章

网友评论

      本文标题:[065]Ruby on rails筆記-Active Reco

      本文链接:https://www.haomeiwen.com/subject/eimjsttx.html