[065]Ruby on rails筆記-Active Record驗證

前言:

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

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


總結:

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容